2016-09-27 4 views
0

私はJava SEアプリケーションを作成しました。私はLinuxマシン上で動作するrunnable jarをエクスポートしました。ウィンドウ上で実行される同じjarファイルを使用してexeファイルを作成しました。Eclipse Jetty Serverシングルインスタンスアプリケーション

exeを何回か実行すると、複数のインスタンスが作成されています(タスクマネージャのjavaw.exe)どうしたらいいですか?

私はそれを防止したいと思います。そのためには、まずサーバーが稼働しているかどうかを確認しようとしていますが、それはstatic main()メソッド内で使用しています。 ServerクラスのisRunning()メソッドは非静的です。

Windowsと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

私の説明は長いですが、助けてくれることを願っています: 'Server server = new Server();'の直後に 'System.out.println(" Server started "); 'cmd'か' terminal'からjarファイルを実行してください。このようにしてサーバーが稼働している場合は、print outステートメントの直後にカーソルが点滅します。そうでない場合、例えばWindowsでは 'C:\ Windows \ System32> 'と表示され、サーバサービスが停止または終了したことを示します。 –

+0

または[この参照](http://stackoverflow.com/questions/27231413/how-do-i-know-that-jetty-started-successfully-with-application-instance-from-an) –

答えて

1

単一インスタンスサーバーアプリケーションを作成するために、あなたの目標は、かなり簡単にする必要があります。ポート8080に2度バインドできないという事実に頼ることができます。少なくとも、それはLinux上で動作する方法です。 :)

つまり、server.start();は意味のある例外を伴い、おそらく失敗し、アプリケーションをキャッチしてアプリケーションを終了します。これは、ポートが解放されるまで他のすべてのインスタンスに発生するはずです。

もちろん、単一インスタンスのアプリケーションをネイティブに作成する方法があります(EXEラッパーにはそのオプションなどが必要です)が、ここではポートロックを使用します。

+0

を確認する同じポートに複数のインスタンスを作成します。サーバーが実行されているかどうかを確認するにはどうすればよいですか? –

+0

**複数のインスタンスが同じポートにある**それはどういう意味ですか?そんなことがあるものか? –

+0

複数のインスタンスではないかもしれませんが、.exeファイルを複数回ダブルクリックすると、タスクマネージャで見ることができるmutilple javaw.exeです。 –

関連する問題