Strange GUI freezing TrayIcon + PopupMenu, please help

K

kermitas

Can anybody help me ?

I wrote very simple program demostrating some GUI activities (changing
JPanel background color and tray icon). The problem is that my program
freez when I popup tray icon menu (right click) ! :(

This hapens on Windows XP and 2000 on Java 6.0 b105 and u1 b03.

I also tryed popup menu manually via .show() from new thread, but it
still blocks my program GUI.

Can you just copy & paste this program, run it and tell me behaviour
on your computer ???? Thank you very much.

Maby somebody know what I am doing wrong and how to use PopupMenu
without blocking other GUI operations ???

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

public class IsTrayIconMenuBlocking3
{
public static void main( String[] args ) throws Exception
{
// --- JFrame & JPanel section
final JPanel jp = new JPanel();

JFrame jf = new JFrame();
jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
jf.add( jp );
jf.setSize( 300 , 300 );
jf.setVisible( true );

// --- menu item action
ActionListener itemExitAction = new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
System.out.println( "item action:
exit" );
System.exit( 0 );
}
};

// --- popup menu
PopupMenu pm = new PopupMenu( "Tray Menu" );
MenuItem mi = new MenuItem( "Exit" );
mi.addActionListener( itemExitAction);
pm.add( mi );

// --- system tray & tray icon
final TrayIcon ti = new
TrayIcon( ((ImageIcon)UIManager.getIcon("OptionPane.questionIcon")).getImage() ,
"Tray Icon" , pm );
SystemTray st = SystemTray.getSystemTray();
ti.setImageAutoSize( true );
st.add( ti );

// --- color & icon changing loop
final Image[] trayIcons = new Image[3];
trayIcons[0] =
((ImageIcon)UIManager.getIcon("OptionPane.errorIcon")).getImage();
trayIcons[1] =
((ImageIcon)UIManager.getIcon("OptionPane.warningIcon")).getImage();
trayIcons[2] =
((ImageIcon)UIManager.getIcon("OptionPane.informationIcon")).getImage();

Runnable colorChanger = new Runnable()
{
private int counter = 0;
private int icon_no = 0;

public void run()
{
System.out.println( "Hello from EDT "
+ counter++ );

if( jp.getBackground() == Color.RED )

jp.setBackground( Color.BLUE );
else
jp.setBackground( Color.RED );

ti.setImage( trayIcons[icon_no++] );
if( icon_no == trayIcons.length )
icon_no = 0;
}
};

while( true )
{

javax.swing.SwingUtilities.invokeLater( colorChanger);
try{Thread.sleep( 500 );} catch ( Exception e )
{}
}

}

}

//====================================

Once again, thanks !!
Artur Stanek, PL
 
C

Chris Uppal

I wrote very simple program demostrating some GUI activities (changing
JPanel background color and tray icon). The problem is that my program
freez when I popup tray icon menu (right click) ! :(

I tried your program, and the same thing happens here on WinXP.

Maby somebody know what I am doing wrong and how to use PopupMenu

I woudn't be surprised if the popup menu is run in a modal loop from inside the
Windows implementation of AWT. If that /is/ so, then I don't think you'll be
able to avoid blocking the EDT while the menu is popped up.

-- chris
 
G

gethostbyname

I tried your program, and the same thing happens here on WinXP.


I woudn't be surprised if the popup menu is run in a modal loop from inside the
Windows implementation of AWT. If that /is/ so, then I don't think you'll be
able to avoid blocking the EDT while the menu is popped up.

-- chris

I am a newbie to JAVA. :)
I has a doubt about the

"jf.setVisible( true ); "

Isn't recommended to put it after the addition of components to the
JFrame in main? Before the loop while in that example.

Sometimes, when I don't do it on WinXP, the window components aren't
drawn in window on first time. I need to resize the window to
components to apper.

thanks you
gethostbyname
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,011
Latest member
AjaUqq1950

Latest Threads

Top