Erreur de compilation (unreported exception java.io.IOException in default const

Résolu
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012 - 19 févr. 2006 à 16:29
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012 - 21 févr. 2006 à 12:02
Bonjour,





J'ai un soucis lors d'une compilation. J'ai l'erreur suivante qui s'affiche :





ServeurConnexion.java:9: unreported exception java.io.IOException in default constructor


class ServeurConnexion extends Serveur


^





Quand je vois ça, je comprend qu'il y a une erreur non reportée dans le
constructeur de ServeurConnexion... or je n'ai pas de constructeur pour
ServeurConnexion...








Squelette :





class Serveur extends Thread


{


...


public Serveur() throws IOException


{


...


}





public static void main(String[] args) throws IOException


{


lancerServ();


}// main





public static void lancerServ() throws IOException // pour lancer le serveur


{


ServConn = new ServeurConnexion();


...


ServConn.start();


...


}// lancerServ


}





class ServeurConnexion extends Serveur


{


private boolean continuer;


private ServerSocket ecoute;





public int reception_fichier_liste(Socket socket,int num_connec) throws IOException


{


...


}





public void run()


{


...


}// run





public void arret() throws IOException


{


ecoute.close();


...


}// arretConn


}// ServeurConnexion





J'ai chercher sur google, mais il n'y a que 7 résultats... dont les 3/4 en chinois...





Merci pour votre aide
A voir également:

11 réponses

tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
19 févr. 2006 à 18:31
Avec le numero des lignes, ça aurait été un poil plus simple :D

je pense que :

dans ServeurConnexion, aucun constructeur n'est défini mais en fait, Java, considére que le constructeur ServeurConnexion() est défini explicitement (un constructeur par défaut, sans exception throws) et appelle le constructeur par défaut de la classe parente (Serveur() )
dans le constructeur Serveur(), l'exception IOException est déclarée throws mais dans ServeurConnexion, cette exception ne l'est pas... je sais pas si c'est trés clair lol

En gros, pour que ça marche : rajoute le constructeur dans ServeurConnexion :

public ServeurConnexion() throws IOException
{
//ne rien mettre ici
}

ça fera exactement pareil mais sans l'erreur de compil je pense... :)

a l'appel du constructeur ServeurConnexion, le constructeur de Serveur sera appellé avant (meme si il y a aucune instruction dans ServeurConnexion() !). Pour t'en rendre compte, rajoute :
dans Serveur() :
System.out.println("constructeur de Serveur()");

dans ServeurConnexion() :
System.out.println("constructeur de ServeurConnexion()");

A la construction d'un objet ServeurConnexion, dans la console, devrait apparaitre :
constructeur de Serveur()
constructeur de ServeurConnexion()
on voit bien que le constructeur de Serveur() est appellé en premier puis le constructeur de ServeurConnexion()

Voili
3
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
19 févr. 2006 à 18:35
Merci pour ta proposition, mais j'y avais déjà pensé, et ca ne marche pas :'(
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
19 févr. 2006 à 20:35
ben en faittu fait tout simplement un try catch pour les ligne qui posent probleme :
try{
// lignes

}catch(Exception e){
e.printStackTrace();
}

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
20 févr. 2006 à 22:45
Salut,

ce qui pose problème c'est de trouver les "lignes à problèmes". Pour être sûr de ne pas en louper, j'ai mis en début de chaque fonction un try{ et à la fin }catch(IOEception e){System.out.println(e);} (j'ai beaucoup de void, donc pas trop de problème avec un return dans le try{}, pour les rares fonctions j'ai fais plusieurs try catch) mais toujours la même erreur ...
Bon je vais recommencer au cas ou j'ai raté quelque chose !

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
20 févr. 2006 à 23:13
Bon oki, les "lignes a problème" comme tu dit sont les lignes où des exceptions doivent etre catchées... (regarde tout le temps la doc JAVA, c'est indispensable pour voir quelles exceptions sont levées par une fonction (http://java.sun.com/j2se/1.4.2/docs/api/))

Chaque fois que dans une fonction il y a "throws exception" cela veut dire que l'exception va etre "transferée" vers celui qui appelle la fonction. En Java, les exceptions ne doivent pas partir "dans la nature" c'est a dire que si une exception peut etre levée, il faut obligatoirement l'attrapper à un moment donné.

Dans ton code, je vois des fonctions avec des IOException throwed (je fais du fran-glais lol). Donc a chaque appel a tes fonctions tu es obligé de catché cette Exception qui peut vraiment rendre ton code lourd a coder (a chaque appel faut faire un try{}catch{} ) C'est bien, c'est propre mais est ce utile dans ton programme aprés ? est ce que tu prends vraiment en compte ces exceptions ? si tu te contente de faire :
try{
ma_fonction()
}catch(Exception e} {} pour faire plaisir au compilateur

il n'y a pas grand interet a se farcir toutes les exceptions.

Donc pour commencer, pour enlever toutes tes lignes a problèmes, tu peux modifier tes fonctions en ne transferant plus l'exception (plus de throws) mais en catchant l'exception directement dans la fonction :

par exemple :
public int reception_fichier_liste(Socket socket,int num_connec) throws IOException
pourrait devenir :

public int reception_fichier_liste(Socket socket,int num_connec)
{
try{ //catch l'exception dans la fonction
socket.getInputStream().read();
... je sais pas ce que tu fait ...
}catch(IOException e)
{ //en cas d'erreur
return -1;
}
}

Ainsi, tu vois ici que l'IOException est directement gérée dans la fonction. Elle renvoi juste -1 si il y a une erreur (l'exception levée). ça t'évite de faire a chaque appel de reception_fichier_liste, un truc du style :
try{
reception_fichier_liste(socket;2);
}catch(Exception e) {}
qui va certainement t'enlever un bon nombre de soucis. Certe c'est pas toujours propre de catcher l'exception dans la fonction (les puristes vont peut etre pas aimer) mais parfois c'est pas utile de transferer l'exception. Transfere l'exception uniquement dans des cas bien utile et sensible comme a la connexion de la socket. etc..

J'espere t'avoir un peu aider...
0
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
20 févr. 2006 à 23:18
je passe mon programme au peigne fin, pour chaque appel de fonction ou autre je regarde la doc... C'est long mais ca se fait :) Je vérais bien le résultat.

Merci,
0
tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
20 févr. 2006 à 23:30
Tu sais, a la compil, le compilateur te dit directement où sa pose problème, il te dit meme quelle exception n'est pas catché... lol ça t'évitera de parcourir ligne a ligne lol
0
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
20 févr. 2006 à 23:33
ServeurConnexion.java:22: unreported exception java.io.IOException in default constructor
class ServeurConnexion extends Serveur
^

c'est la seule erreur de compilation que j'ai !! c'est pour ca que j'ai un problème !! :)
0
tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
20 févr. 2006 à 23:41
t'avais essayé de rajouter dans ServeurConnexion :

public ServeurConnexion() throws IOException
{
}

pour voir ?

Je viens de faire un test :

dans test2.java :
import java.io.*;
public class test2 {

private int a=0;

/** Constructeur de test2 */
public test2() throws IOException
{
if (a==0) throw new IOException();
}
}

dans test3.java :
public class test3 extends test2{

/** Constructeur de test3 */
public test3() throws java.io.IOException
{
}

}

si je met pas l'exception dans le constructeur de test3, j'ai la meme erreur que toi...
0
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
20 févr. 2006 à 23:48
j'ai pas de constructeur dans ServeurConnexion, j'en ai déjà rajouté un en mettant throws IOException pour essayer mais j'ai toujours la même erreur. Donne moi un e-mail en MP si tu veux pouvoir faire tes tests sur mes sources... En attendant je continu de passer mon code au peigne fin :)

merci
0
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
21 févr. 2006 à 12:02
c'est bon ca marche, j'avais mal déclaré mon constructeur dans ServeurConnexion !

merci
0
Rejoignez-nous