dmk04
Messages postés206Date d'inscriptionsamedi 29 octobre 2005StatutMembreDernière intervention 7 mars 2012
-
19 févr. 2006 à 16:29
dmk04
Messages postés206Date d'inscriptionsamedi 29 octobre 2005StatutMembreDerniè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:
Unreported exception ioexception; must be caught or declared to be thrown
Unreported exception java.io.ioexception; must be caught or declared to be thrown - Meilleures réponses
tucobouch
Messages postés194Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 1 mai 200950 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()
dmk04
Messages postés206Date d'inscriptionsamedi 29 octobre 2005StatutMembreDerniè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
Vous n’avez pas trouvé la réponse que vous recherchez ?
tucobouch
Messages postés194Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 1 mai 200950 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..
dmk04
Messages postés206Date d'inscriptionsamedi 29 octobre 2005StatutMembreDerniè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.
tucobouch
Messages postés194Date d'inscriptionvendredi 17 février 2006StatutMembreDernière intervention 1 mai 200950 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
dmk04
Messages postés206Date d'inscriptionsamedi 29 octobre 2005StatutMembreDerniè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 :)