2016-09-27 3 views
0

Я создал приложение Java Java. Я экспортировал runnable jar, который работает на Linux-машине. и создал exe-файл, используя ту же самую банку, которая работает в окнах.Приложение с одним экземпляром Eclipse Jetty Server

Если я запускаю exe несколько раз, создается несколько экземпляров (javaw.exe в диспетчере задач). Как я могу предотвратить это?

Я хочу предотвратить это. для этого изначально я пытаюсь проверить, работает ли сервер, но я использую его внутри метода static main(). и isRunning() метод класса Server нестационар.

Мне нужно запустить приложение на обоих окнах и linux os.

Код:

public static void main(String[] args) { 
    try { 
     if(Server.isRunning()){ // compilation error  
     } 
     Server server = new Server(); 
     ServerConnector connector = new ServerConnector(server); 
     connector.setPort(8080); 
     server.addConnector(connector); 

     ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); 
     context.setContextPath("/"); 
     server.setHandler(context); 

     // Initialize javax.websocket layer 
     ServerContainer wscontainer = WebSocketServerContainerInitializer.configureContext(context); 

     // Add WebSocket endpoint to javax.websocket layer 
     wscontainer.addEndpoint(EventSocket.class); 

     server.start(); 
     server.dump(System.err); 
     server.join(); 
    } catch (Throwable t) { 
     logger.error("Server Error : " + t.getMessage(), t); 
    } 
} 
+0

Мое объяснение довольно долгое, но надеемся, что это поможет: Положите 'System.out.println (« Server started »);' заявление сразу после 'Server server = new Server();'. Запустите файл jar с 'cmd' или' terminal'. Таким образом, если сервер работает, вы увидите, что курсор мигает сразу после инструкции распечатки. Если это не так, в окнах, например, вы увидите 'C: \ Windows \ System32>', который показывает, что служба сервера была остановлена ​​или завершена. –

+0

Или проверить [эту ссылку] (http://stackoverflow.com/questions/27231413/how-do-i-know-that-jetty-started-successfully-with-application-instance-from-an) –

ответ

1

Ваша цель, чтобы создать один экземпляр сервера приложений должно быть довольно легко. Вы можете положиться на то, что вы не можете дважды привязать порт 8080. По крайней мере, так оно работает в Linux. :)

Это означает, что server.start();, вероятно, не сработает с каким-либо значимым исключением - вы поймаете его и прекратите применение. Это должно произойти со всеми другими экземплярами, пока порт не будет выпущен.

Конечно, есть способы создать приложения с одним экземпляром изначально (у EXE-оболочки должна быть опция для этого и т. Д.), Но здесь я бы пошел с блокировкой портов.

+0

на окнах it создает несколько экземпляров на одном и том же порту. Как проверить, работает ли сервер или нет? –

+0

** несколько экземпляров в одном порту ** Что это должно означать. Как это возможно? –

+0

это не может быть несколько экземпляров, но когда я дважды раза раза раза раза раза раза раза раза раза проигрываю файл .exe, mutilple javaw.exe, я вижу в диспетчере задач. –