Probleme con en java

[code]import java.net.;
import java.io.
;

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

       ServerSocket serverSocket = null;
       try {
           serverSocket = new ServerSocket(4444);
       } catch (IOException e) {
           System.err.println(“Could not listen on port: 4444.”);
           System.exit(1);
       }

       Socket clientSocket = null;
       try {
           clientSocket = serverSocket.accept();
       } catch (IOException e) {
           System.err.println(“Accept failed.”);
           System.exit(1);
       }

       PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
       BufferedReader in = new BufferedReader(
   new InputStreamReader(
   clientSocket.getInputStream()));
       String inputLine, outputLine;
       KnockKnockProtocol kkp = new KnockKnockProtocol();

       outputLine = kkp.processInput(null);
       out.println(outputLine);

       while ((inputLine = in.readLine()) != null) {
            outputLine = kkp.processInput(inputLine);
            out.println(outputLine);
            if (outputLine.equals(“Bye.”))
               break;
       }
       out.close();
       in.close();
       clientSocket.close();
       serverSocket.close();
   }
}[/code]

et il me met :

java.lang.Error: Unresolved compilation problem:

at knockSereur.KnockKnockServer.main(KnockKnockServer.java:5)

Exception in thread “main”

je ne pige pas du tout la …

Si quelqu’un a une idée …
(ps : j’ai essayé en virant throws IOException)

merci

Bussiere

Faute de frappe ?

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

C’est quoi cette horreur !!! :stuck_out_tongue: Tu vas me la capturer dans le main bien proprement ton IOException, parce que là, même si tu dis que tu as essayé sans le IOException, l’erreur est à la ligne 5 et la ligne 5, c’est la déclaration de la méthode main.

Sinon, ton erreur, c’est à la compilation ou à l’exécution (bien que j’ai quelque doute qu’un code comme ça compile).

Je suis gentil :

[code]import java.net.;
import java.io.
;

public class KnockKnockServer {
  public static void main(String[] args) {

      ServerSocket serverSocket = null;
      try {
          serverSocket = new ServerSocket(4444);
      } catch (IOException e) {
          System.err.println(« Could not listen on port: 4444. »);
          System.exit(1);
      }

      Socket clientSocket = null;
      try {
          clientSocket = serverSocket.accept();
      } catch (IOException e) {
          System.err.println(« Accept failed. »);
          System.exit(1);
      }

      try {
           PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
           BufferedReader in = new BufferedReader(
                 new InputStreamReader(
                 clientSocket.getInputStream()));
           String inputLine, outputLine;
           KnockKnockProtocol kkp = new KnockKnockProtocol();

           outputLine = kkp.processInput(null);
           out.println(outputLine);

           while ((inputLine = in.readLine()) != null) {
                outputLine = kkp.processInput(inputLine);
                out.println(outputLine);
                if (outputLine.equals(« Bye. »))
                   break;
           }
           out.close();
           in.close();
           clientSocket.close();
           serverSocket.close();
       } catch (IOException e) {
          System.err.println(« IOException »);
       }
  }
}[/code]

N’ayant pas le code complet je n’est pas testé, mais ça à plus de chance de fonctionner

C’est tout à fait possible d’avoir :

[quote name=‘nic58’ date=’ 20 Sep 2005, 22:47’]C’est tout à fait possible d’avoir :

[right][post=“399632”]<{POST_SNAPBACK}>[/post][/right][/quote]

Dans tous les cas, c’est dégeullasse ! Toutes les erreurs doivent être capturées.

Ah la dessus je suis d’accord.
Sinon à quoi ça sert de faire des exceptions.

pourquoi il y a “at knockSereur.KnockKnockServer.main(KnockKnockServer.java:5)” ?
Elle sort d’où la faute ?

C’est peut être pas une faute en faite ?.

[quote name=‹ ZGoblin › date=’ 20 Sep 2005, 22:49’]Toutes les erreurs doivent être capturées.
[right][post=« 399634 »]<{POST_SNAPBACK}>[/post][/right][/quote]
wééé gotta catch them all © (si mes souvenirs sont bons)

Heu sinon j’ai fais un copier-coller, j’ai refais une classe KnockKnockProtocol
minimal pour avoir les fonctions que tu utilises. J’ai executé et ça « marche »=> Il affiche impossible de se connecter au port 4444.

Donc possible problème du coté de ton compilo. Réinstalle ton jdk… :stuck_out_tongue:
Edit: la classette, pour tester

[code]

public class KnockKnockProtocol {
public String processInput(String aString){
 return aString;
}
}[/code]

[quote name=‘ZGoblin’ date=’ 20 Sep 2005, 21:49’]Dans tous les cas, c’est dégeullasse ! Toutes les erreurs doivent être capturées.
[right][post=“399634”]<{POST_SNAPBACK}>[/post][/right][/quote]
Bah, ce qui est dégueulasse, c’est surtout que c’est le pour le main.

merci a tous je teste ca ce soir j’ai plus le net je vous tiens au courant un grand merci en tout cas
(ps c’est un des exemples du manuel officiel de java pourtant :P)

Bussiere

[quote name=‹ ZGoblin › date=’ 20 Sep 2005, 21:49’]Dans tous les cas, c’est dégeullasse ! Toutes les erreurs doivent être capturées.
[right][post=« 399634 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Je ne suis que partiellement d’accord.
Toutes les Exceptions doivent être catchées, mais pas les RuntimeException (qui peuvent être catchée mais pas obligatoirement).
Dans tous les cas, qd tu as des Exception (du genre IO), catch la et dans le catch mets un truc du genre

throw new RuntimeException("Ca chie", monIOException)(sauf si tu sais gérer l’erreur autrement qu’en faisant interrompre le programme).

Mais c’est sur, catcher l’exception pour faire exit(1) c’est déjà moins porc que de déclarer l’exception dans le main :wink:

[quote name=‹ viewww › date=’ 21 Sep 2005, 18:05’]Je ne suis que partiellement d’accord.
Toutes les Exceptions doivent être catchées, mais pas les RuntimeException (qui peuvent être catchée mais pas obligatoirement).
Dans tous les cas, qd tu as des Exception (du genre IO), catch la et dans le catch mets un truc du genre

throw new RuntimeException("Ca chie", monIOException)(sauf si tu sais gérer l’erreur autrement qu’en faisant interrompre le programme).

Mais c’est sur, catcher l’exception pour faire exit(1) c’est déjà moins porc que de déclarer l’exception dans le main :wink:
[right][post=« 399976 »]<{POST_SNAPBACK}>[/post][/right][/quote]

Oui, quand je dis qu’il faut tout catcher, je parle bien sur des Exception qui ne dérive pas de RuntimeException, catcher les NullPointerException et autres IndexOutOfBoundsException c’est dégeullasse aussi, faut mieux testé avec un if(xx == null) et éviter de faire des dépassement de capacité.

Pour le throw new RuntimeException(« Ca chie », monIOException), je ne suis pas d’accord, dans la plupart des cas, quand ca merde niveau IO on ne fait pas crasher le programme violemment, on affiche un jolie message en Swing/System.err/Log4J ou tout autre moyen selon le programme que l’on développe.
Par contre, c’est vrai qu’on l’encapsulation d’une exception dans une autre exception ‹ métier › peut être pratique. Dans ce cas on a un truc du genre :

  [code] [...]

      try {
          PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
          […]          
      } catch (IOException e) {
           throw new MonExceptionMetier(« mon texte », e);
      } finally {
          try {
              out.close();
          } catch(IOException e) {
               Logger.log(…);
          }
      }[/code]

Mais bon, pour faire un truc de ce genre, ca ne fait pas de le main mais dans une classe métier, l’exception est ainsi propagé du code métier vers l’interface graphique ou autre chose en cachant la vrai nature de l’erreur. (Je ne suis pas sur d’être très claire)

[quote name=‘ZGoblin’ date=’ 21 Sep 2005, 18:27’]Oui, quand je dis qu’il faut tout catcher, je parle bien sur des Exception qui ne dérive pas de RuntimeException, catcher les NullPointerException et autres IndexOutOfBoundsException c’est dégeullasse aussi, faut mieux testé avec un if(xx == null) et éviter de faire des dépassement de capacité.

Pour le throw new RuntimeException(“Ca chie”, monIOException), je ne suis pas d’accord, dans la plupart des cas, quand ca merde niveau IO on ne fait pas crasher le programme violemment, on affiche un jolie message en Swing/System.err/Log4J ou tout autre moyen selon le programme que l’on développe.
Par contre, c’est vrai qu’on l’encapsulation d’une exception dans une autre exception ‘métier’ peut être pratique. Dans ce cas on a un truc du genre :

      [...] &nbsp; &nbsp; &nbsp; try { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [...] &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch (IOException e) { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throw new MonExceptionMetier("mon texte", e); &nbsp; &nbsp; &nbsp; } finally { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; out.close(); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } catch(IOException e) { &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Logger.log(...); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; &nbsp; &nbsp; }

Mais bon, pour faire un truc de ce genre, ca ne fait pas de le main mais dans une classe métier, l’exception est ainsi propagé du code métier vers l’interface graphique ou autre chose en cachant la vrai nature de l’erreur. (Je ne suis pas sur d’être très claire)
[right][post=“400020”]<{POST_SNAPBACK}>[/post][/right][/quote]

sinon le source vient de la :

http://java.sun.com/docs/books/tutorial/ne…ientServer.html

je l’ai recopié tel quel pourtant mais j’ai quand meme cette erreur a la con je ne piges pas du tout merci

Bussiere

[quote name=‘Bussiere’ date=’ 21 Sep 2005, 19:54’]sinon le source vient de la :

http://java.sun.com/docs/books/tutorial/ne…ientServer.html

je l’ai recopié tel quel pourtant mais j’ai quand meme cette erreur a la con je ne piges pas du tout merci

Bussiere
[right][post=“400034”]<{POST_SNAPBACK}>[/post][/right][/quote]

Franchement là, ils me déçoivent chez sun, je sais bien que c’est juste un exemple mais ils auraient plus faire un exemple un peu mieux quand même. Enfin bref, si ca vient de chez sun ça doit compiler et s’exécuter. Tu lances quoi comme commande de compilation ?

en fait en reinstallant les jdk et eclipse ca a marché merci beaucoup

Bussiere