# Tray-Icon-Menü unter Linux



## Thammi (25. Apr 2006)

Hi,
ich hab ein Problem mit meinem Programm. Ich versuche in einem Tray-Icon ein Menü einzurichten das auftaucht wenn man auf es mit der rechten Maustaste klickt. Es funktioniert zwar unter Windows, jedoch nicht unter Linux (KDE 3.3 und Gnome getestet; Debian 3.1 stable; Kernel 2.6) nicht.
Hier der Code den ich benutze:


```
icon = new TrayIcon( image );
icon.setImageAutoSize( true );

// Pop-Up-Menü
PopupMenu pop = new PopupMenu( "Sound-Server Control" );
addPopupMenuItem( pop, "Abspielen", "send_play" );
addPopupMenuItem( pop, "Pause", "send_pause" );
addPopupMenuItem( pop, "Stop", "send_stop" );
addPopupMenuItem( pop, "Weiter", "send_forward" );
addPopupMenuItem( pop, "Zurück", "send_back" );
pop.addSeparator();
addPopupMenuItem( pop, "Playlist wechseln", "playlist" );
addPopupMenuItem( pop, "In Playlist suchen", "search" );
addPopupMenuItem( pop, "Timer setzen", "timer" );
pop.addSeparator();
addPopupMenuItem( pop, "Verbindungskonsole", "start_console" );
addPopupMenuItem( pop, "Sound-Server Library Manager", "start_sslm" );
addPopupMenuItem( pop, "Sound-Server Control", "show" );
addPopupMenuItem( pop, "Beenden", "quit" );
icon.setPopupMenu( pop );
// Der Listener fürs Pop-Up-Menü
pop.addActionListener( new ActionListener() {
	public void actionPerformed( ActionEvent e )
	{
		String cmd = e.getActionCommand();
		if( cmd.equals( "show" ) )
			forceVisibleWindow( frame );
		else if( cmd.equals( "playlist" ) )
			forceVisibleWindow( playlistFrame );
		else if( cmd.equals( "search" ) )
			forceVisibleWindow( searchFrame );
		else if( cmd.equals( "timer" ) )
			invokeTimer();
		else if( cmd.equals( "quit" ) )
			exit();
		else if( cmd.startsWith( "send_" ) )
		{
			try { Socke.send( cmd.substring( 5 ) ); }
			catch(Exception f) { }
		}
		else if( cmd.startsWith( "start_sslm" ) )
			NewInstanceKicker.startSSLM();
		else if( cmd.startsWith( "start_console" ) )
			NewInstanceKicker.startConsole();
	}
});

// Mit Doppelklick soll das Hauptfenster erscheinen
icon.addActionListener( new ActionListener() {
	public void actionPerformed(ActionEvent e)
	{
		forceVisibleWindow( frame );
	}
});
tempTrayList.add( icon );
```

Dabei wird übrigens immer folgender Fehler ausgegeben, der aber auch beim linksklicken und unter Windows (wo es ja klappt) kommt:


```
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.awt.TrayIcon cannot be cast to java.awt.Component
        at javax.swing.plaf.basic.BasicLookAndFeel$AWTEventHelper.eventDispatched(BasicLookAndFeel.java:2089)
        at java.awt.Toolkit$SelectiveAWTEventListener.eventDispatched(Toolkit.java:2339)
        at java.awt.Toolkit$ToolkitEventMulticaster.eventDispatched(Toolkit.java:2232)
        at java.awt.Toolkit.notifyAWTEventListeners(Toolkit.java:2190)
        at java.awt.TrayIcon.dispatchEvent(TrayIcon.java:665)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
```


Mache ich irgend etwas falsch? Oder ist das ein bekannter Bug oder so?

Schon mal danke im Vorraus![/quote]


----------



## Bert Brenner (26. Apr 2006)

java.awt.TrayIcon? Bist du der Zeit nicht ein klein wenig voraus?


----------



## Guest (26. Apr 2006)

Welche lib verwendest du java 1.6 oder vielleicht JDIC.
Hier habe ich dir mal ein paar links http://download.java.net/jdk6/docs/api/java/awt/SystemTray.html
https://jdic.dev.java.net/documentation/incubator/tray/index.html

Vielleicht hilft dir das weiter. Das sind die 2 einsigsten lib's die mir gerade einfallen. Nur java 1.6 oder java 6.0 wie es so schön heißt ist noch fehlerhaft. Mit dem kann ich unter linux noch nicht arbeiten.


----------



## thE_29 (26. Apr 2006)

Bzw, hast du unter Linux überhaupt das Java 1.6 oder ne andere Version?


----------



## Guest (26. Apr 2006)

Bert Brenner hat gesagt.:
			
		

> java.awt.TrayIcon? Bist du der Zeit nicht ein klein wenig voraus?



Oh, tut mir leid. Ich habe vergessen mit hinzuschreiben, dass ich die Java 6 Beta verwende ... hatte ich ganz vergessen als ich mein Linux grad so fein beschrieben hatte.
Das JavaDoc habe ich mir schon angeschaut, konnte darin nichts entdecken was ich falsch mache oder so. Ich wollte hier bloss mal Fragen ob schon jemand Erfahrung mit den Tray-Icons von Java 6 hat oder ob ich meiner Zeit wirklich so sehr vorraus bin.
Wäre nett wenn sich nochmal jemand mit Hinweisen meldet.

Danke für die vielen Antworten.


----------



## Thammi (26. Apr 2006)

Die letzte Nachricht ist von mir. Sry, aber ich hatte Probs beim anmelden.

PS: Das JDK und die JRE laufen auf meinem Debian eigentlich sehr gut, bis auf diesen kleinen Fehler!


----------



## thE_29 (27. Apr 2006)

In den englischen java forums schon mal nachgeschaut?

Hier tun sich net grad viele mit Beta dingern abärgern


----------



## byte (27. Apr 2006)

Anonymous hat gesagt.:
			
		

> Das sind die 2 einsigsten lib's die mir gerade einfallen.



SWT kanns natürlich auch.


----------



## SAP-Proger (29. Apr 2006)

...wir arbeiten seit über 7 Jahren mit dem SysTrayIcon von amdesign.org

gruß almer.


----------



## Thammi (29. Apr 2006)

SAP-Proger hat gesagt.:
			
		

> ...wir arbeiten seit über 7 Jahren mit dem SysTrayIcon von amdesign.org
> 
> gruß almer.



"ist nur mit den Windows OS (95/98/ME/NT4.0/2000/XP) kompatibel."


----------



## Gast (29. Apr 2006)

so vie ich weiß nicht jeder LINUX OS besitzt SysTray also must für jeden System extra progen


----------

