Объяснение поведения - PullRequest
       6

Объяснение поведения

0 голосов
/ 10 февраля 2011

Может кто-нибудь объяснить, почему этот код останавливается при startFileHTTP ()? Сервер Jetty запускается, но остальная часть программы не работает. Нужно ли мне смотреть на многопоточное программирование?

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

public void startFileHTTP() throws Exception {
     Server server = new Server();
     SelectChannelConnector connector = new SelectChannelConnector();
     connector.setPort(8080);
     server.addConnector(connector);

     ResourceHandler resource_handler = new ResourceHandler();
     resource_handler.setDirectoriesListed(true);
     resource_handler.setWelcomeFiles(new String[] { "index.html" });

     resource_handler.setResourceBase("/test");

     HandlerList handlers = new HandlerList();
     handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });
     server.setHandler(handlers);

     server.start();
     server.join();
}

Консоль

2011-02-10 13:55:47.828:INFO::jetty-7.1.6.v20100715
2011-02-10 13:55:47.953:INFO::Started SelectChannelConnector@0.0.0.0:8080

1 Ответ

2 голосов
/ 10 февраля 2011

Я думаю, причина в том, что самая последняя строка функции -

server.join();

Эта функция возвращается только после завершения потока server. Кажется, что это не то, что вы хотите, так как похоже, что вы хотите, чтобы он работал в фоновом режиме. Избавление от этой строки должно исправить это.

Кроме того, вы, вероятно, не должны бросать Exception из startFileHTTP. Это делает менее понятным, какие исключения могут быть сгенерированы, и уменьшает количество информации, предоставляемой вызывающими сторонами о том, какие ошибки они могут ожидать.

...