Erreur de compilation (unreported exception java.io.IOException in default const [Résolu]

dmk04 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention - 19 févr. 2006 à 16:29 - Dernière réponse : dmk04 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
tucobouch 207 Messages postés vendredi 17 février 2006Date d'inscription 1 mai 2009 Dernière intervention - 19 févr. 2006 à 18:31
3
Merci
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

Merci tucobouch 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de tucobouch
dmk04 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention - 19 févr. 2006 à 18:35
0
Merci
Merci pour ta proposition, mais j'y avais déjà pensé, et ca ne marche pas :'(
Commenter la réponse de dmk04
sheorogath 2465 Messages postés samedi 21 février 2004Date d'inscription 29 janvier 2010 Dernière intervention - 19 févr. 2006 à 20:35
0
Merci
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"
Commenter la réponse de sheorogath
dmk04 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention - 20 févr. 2006 à 22:45
0
Merci
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
Commenter la réponse de dmk04
tucobouch 207 Messages postés vendredi 17 février 2006Date d'inscription 1 mai 2009 Dernière intervention - 20 févr. 2006 à 23:13
0
Merci
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...
Commenter la réponse de tucobouch
dmk04 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention - 20 févr. 2006 à 23:18
0
Merci
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,
Commenter la réponse de dmk04
tucobouch 207 Messages postés vendredi 17 février 2006Date d'inscription 1 mai 2009 Dernière intervention - 20 févr. 2006 à 23:30
0
Merci
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
Commenter la réponse de tucobouch
dmk04 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention - 20 févr. 2006 à 23:33
0
Merci
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 !! :)
Commenter la réponse de dmk04
tucobouch 207 Messages postés vendredi 17 février 2006Date d'inscription 1 mai 2009 Dernière intervention - 20 févr. 2006 à 23:41
0
Merci
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...
Commenter la réponse de tucobouch
dmk04 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention - 20 févr. 2006 à 23:48
0
Merci
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
Commenter la réponse de dmk04
dmk04 206 Messages postés samedi 29 octobre 2005Date d'inscription 7 mars 2012 Dernière intervention - 21 févr. 2006 à 12:02
0
Merci
c'est bon ca marche, j'avais mal déclaré mon constructeur dans ServeurConnexion !

merci
Commenter la réponse de dmk04

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.