2017-01-31 1 views
0

J'ai cette exception. J'essayais de faire le serveur de jetée. Selon l'idée, il doit s'agir de l'argument Handler [], et c'est le cas, mais cette exception. Je n'ai aucune idée de ce que j'ai besoin de changer. Quelqu'un peut-il aider?Pourquoi existe-t-il IllegalArgumentException: Port incorrect: 0?

public static void main(String[] args) { 
    Server server = new Server(); 
    ServerConnector connector = new ServerConnector(server); 
    connector.setPort(8080); 
    server.addConnector(connector); 
    ResourceHandler resourceHandler = new ResourceHandler(); 
    resourceHandler.setDirectoriesListed(true); 
    resourceHandler.setWelcomeFiles(new String[]{ "index.html" }); 
    resourceHandler.setResourceBase("."); 
    HandlerList handlers = new HandlerList(); 
    handlers.setHandlers(new Handler[]{new SocketHandler(), resourceHandler}); //#27 
    server.setHandler(handlers); 
    try { 
     server.start(); 
     server.join(); 
    } 
    catch (Throwable t){ 
     t.printStackTrace(System.err); 
    } 
} 

Je reçois cette exception

java.lang.reflect.InvocationTargetException à sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) à sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java : 62) à sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) à java.lang.reflect.Method.invoke (Method.java:498) à org.codehaus.mojo.exec.ExecJavaMojo $ 1. exécuter (ExecJavaMojo.java:293) at java.lang.Thread.run (Thread.java:745) Causé par: java.lang.IllegalArgumentException: Bad port: 0 à java.util.logging.SocketHandler.connect (SocketHandler.java:160) à java.util.logging.SocketHandler. (SocketHandler.java:125) à our.arti.JettyServerArti.JettyStarter.main (JettyStarter.java:27) ... 6 plus

Si vous avez besoin plus spécifique détails faites le moi savoir.

+0

si vous lisez attentivement votre exception Verront: _Caused par: java.lang.IllegalArgumentException: port Bad: 0_, cela signifie que 'connector.setPort (8080),' ne fonctionne pas correctement .. Avez-vous débogué, existe-t-il des instances 'server' et' connector' valides? –

+0

@JordiCastilla alors que dans ce programme il y avait un Handler à la place des Handlers, il travaillait avec le port 8080 – Artemon

+0

@JordiCastilla - close, mais ce n'est pas ce que cela signifie. Voir ma réponse ci-dessous; l'exception provient de l'initialiseur invoqué par 'new SocketHandler()' qui ne connaît rien du 'ServerConnector' sur lequel l'appel que vous mentionnez est fait. –

Répondre

1

La trace de pile interne contient quelques détails que vous avez peut-être manqués.

Caused by: java.lang.IllegalArgumentException: Bad port: 0 
at java.util.logging.SocketHandler.connect(SocketHandler.java:160) 
at java.util.logging.SocketHandler.<init>(SocketHandler.java:125) 

Notez qu'il est le SocketHandler.<init> qui échoue, pas l'appel setHandlers(); et l'erreur est Bad port: 0. Donc, si vous essayez de comprendre les paramètres de setHandlers(), ça abîme probablement le mauvais arbre ...

Alors, quel est le setHandlers()? C'est ce que vous devriez rechercher ...

+0

Le fichier de configuration java.util.logging est l'endroit où je chercherais l'installation de SocketHandler. –

0

Comme l'a fait remarquer @Mark, le problème est dans l'utilisation de SocketHandler. vous utilisez un mauvais objet en tant que paramètre. Regardez votre erreur, l'objet de type java.util.logging.SocketHandler n'est pas attendu dans votre liste de gestionnaires. il devrait être de type org.eclipse.jetty.server.handler. essayez ceci: handlers.setHandlers(new Handler[] { resourceHandler, new DefaultHandler() });