2011-02-10 102 views
0

有人可以解釋爲什麼此代碼在startFileHTTP()停止?碼頭服務器啓動,但程序的其餘部分不起作用。我是否需要研究多線程編程?行爲解釋

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 [email protected]:8080 

回答

2

我想原因是該函數的最後一行是

server.join(); 

此功能僅在server線程運行完畢後返回。看起來這不是你想要的,因爲它看起來像你希望它在後臺運行。擺脫這條線應該解決這個問題。

另外,你可能不應該從startFileHTTPException。這使得它不太清楚可以拋出什麼異常,並減少了調用者關於他們可能期望看到什麼類型的錯誤的信息量。