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:
Dabei wird übrigens immer folgender Fehler ausgegeben, der aber auch beim linksklicken und unter Windows (wo es ja klappt) kommt:
Mache ich irgend etwas falsch? Oder ist das ein bekannter Bug oder so?
Schon mal danke im Vorraus![/quote]
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:
Code:
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:
Code:
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]