2012-01-24 8 views
2

JavaアプリケーションをWindows 7(32ビット)OS上にWindowsサービスとしてインストールしました。私のアプリケーションは、サービス開始時に通知領域にjava.awt.TrayIconを表示することが期待されます。しかし、それはアイコンを表示していません。 Windows XPでも同じアプリケーションが正常に動作しています。 誰もそれについて考えていますか?javaアプリケーションがWindows 7サービスとしてインストールされている場合、java.awt.Trayiconが表示されない

+0

を使用すると、サービスのプロパティのパネル「ログオン」の「デスクトップとの対話をサービスに許可」フラグを設定することがありますか? –

+0

はい「サービスがデスクトップとやり取りできるようにする」というフラグを設定しました。 –

答えて

1

Windows上のサービスはグラフィカルではありません。これは、ユーザーがログオンしていない状態で実行されているためです。 サービスを管理するトレイアイコンとグラフィカルウィンドウが必要な場合は、サービス(ローカルネットワーク、dcomなど)と通信する別のプログラムを作成し、このプログラムをセッションの起動に追加する必要があります。 (それは私のコンピュータで自分のJavaサービスをやったことがあります)。


私はWindowsサーバー2003で作業しました。Windows 2003以降、サービスにGUIを使用できないことがありますか?

開発しなければならないコードは、必要なものによって異なります。 teサービスプロセスがまだ実行中であることを監視するトレイコンを持っているだけですか? ...

私は、サービスがまだ実行されて応答していることを監視するための単純なコード(例外管理なしでコードを明確にする)を入れました(これは標準のjavaですコード、特別なlibに必要):

システムトレイプログラム:

//if any Exception --> ERROR CODE 
Socket socket = new Socket("localhost", 25146); 
DataOutputStream outToServer = new DataOutputStream(socket.getOutputStream()); 
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
while (true) { 
    outToServer.writeBytes("ping\n"); 
    //Wait maximum 5s to have an answer from the service 
    for (int i = 0; inFromUser.ready() == false && i < 5; ++i) { 
     Thread.sleep(1000); 
    } 
    if (inFromUser.ready() == false) { 
     //ERROR CODE (change systrat icon, display balloon tooltip,...) 
    } else { 
     pong = inFromUser.readLine(); 
     //Check the answer 
    } 

    //Check only every second (don't flood yout computer ;)) 
    Thread.sleep(1000); 
} 
inFromUser.close(); 
outToServer.close(); 
socket.close(); 

サービス・プログラム・コード:

ServerSocket socket = new ServerSocket(this._port); 
while (true) { 
    Socket connection = socket.accept(); 
    Thread thread = new Thread(new Runnable { 
     BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
     DataOutputStream outToClient = new DataOutputStream(connection.getOutputStream()); 
     Scanner scanner = new Scanner(inFromClient); 
     while (scanner.hasNextLine()) { 
      outToClient.writeBytes(scanner.nextLine());  
     } 
     inFromClient.close(); 
     outToClient.close(); 
     connection.close();  
    }); 
    thread.start(); 
} 

あなたはAPをポップアップする場合arameterウィンドウでは、あなたのシステムトレイプログラムのGUIを書き、その結果をパラメータファイルに書き込んだり、特別なキーワードをサービスに送ってパラメータファイルをリロードしたり、GUIを直接サービスに書き込んだりすることができます特別なキーワードを送信し、jframe.setVisible(true)を実行して現在のセッションで表示されることを期待してください:)

+0

ご返信ありがとうございます。 Windows XPで同じアプリケーションを実行しても問題ありません。これはWindows 7固有の問題ですか?ソリューションに関する詳細情報を提供できますか?可能であれば、いくつかのコードで。 –

関連する問題