2011-11-30 2 views
1

이 문제와 관련하여 많은 질문을 보았지만 해결책이 없었습니다. 내 문제는 : 시스템 트레이 아이콘이있는 작은 자바 응용 프로그램을 썼습니다. Windows 탐색기가 충돌 할 때 (explorer.exe 프로세스 중지으로 시뮬레이션 할 수 있음) 복원 후 내 시스템 트레이 아이콘이 사라지지만 내 앱 프로세스는 계속 실행됩니다.탐색기 충돌 후 Java 시스템 트레이 아이콘 복원

explorer.exe를 다시로드 할 때 내 아이콘을 복원 할 수있는 방법이 있습니까?

내 문제는 내가 갈 창이 없다는 것입니다. 내 시스템 트레이 자체가 일부 명령에 대한 실행 프로그램입니다. Windows 작업 표시 줄의 레크리에이션을 듣고 다시 추가 할 수있는 무언가가 필요합니다.

+0

도 참조 http://stackoverflow.com/questions/7923645/how-to-re-add-icon-to-system-tray-after-explorer-exe-crash/7923753 – 9000

+0

I : 예를 들어, 전에이 스레드를 보았습니다. 그것을하는 방법을 알고 있습니까? – SharonBL

+0

아아, Windows 컴퓨터를 사용해 볼 필요가 없습니다. 나는 [JNA] (https://github.com/twall/jna)를 사용하여 그것을하는 방법을 보여주는 코멘트에있는 게시물을 연결했다. 어쩌면 작동 할 수도 있습니다. 또한이 라이브러리가 프로그램에 과도하게 사용되는지 여부를 알 수 없습니다. 빠른 수정으로 매분마다 아이콘을 다시 등록 할 수 있습니다. 즉, _eventually _ 다시 표시됩니다. – 9000

답변

0

창 활성화 이벤트에서 트레이 아이콘을 다시 등록하는 것이 좋습니다. 이렇게하면 트레이 아이콘이 앱으로 다시 전환 할 때마다 업데이트됩니다.

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class MyApp extends JFrame 
{ 
    private static TrayIcon trayIcon = null; 

    public static void main(String[] args) { 
     JFrame app = new MyApp(); 
     app.setSize(400,400); 
     app.setVisible(true); 

     final Image image = Toolkit.getDefaultToolkit().getImage("MyImage.gif"); 

     app.addWindowListener(new WindowAdapter() { 
     public void windowActivated(WindowEvent ev) { 
      registerTrayIcon(image); 
     } 
     }); 
    } 

    private static void registerTrayIcon(Image image) { 
     SystemTray tray = SystemTray.getSystemTray(); 

     if(trayIcon != null) { 
      tray.remove(trayIcon); 
     } 

     trayIcon = new TrayIcon(image, "Tray Demo", null); 

     try { 
      tray.add(trayIcon); 
     } 
     catch(Exception ex) { 
      throw new RuntimeException(ex); 
     } 
    } 
} 
+0

제 문제는 제가 갈 창문이 없다는 것입니다. 내 시스템 트레이 자체가 일부 명령에 대한 실행 프로그램입니다. Windows 작업 표시 줄의 레크리에이션을 듣고 다시 추가 할 수있는 무언가가 필요합니다. – SharonBL

+0

원래 질문 –

+0

을 업데이트하십시오. 10 배 :-) – SharonBL

관련 문제