Возможно, вы управляете компонентами Swing из основного потока, а не из потока отправки событий. Попробуйте обернуть содержимое main
в:
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Rennable() {
@Override
void run() {
FrameTest.ft.setVisible(true);
FrameTest.ft.setLocation(300, 300);
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
SwingUtilities.invokeLater(new Rennable() {
@Override
void run() {
JDialog dlg = new JDialog( ft, "xxx", true );
ft.setExtendedState(JFrame.ICONIFIED);
dlg.setVisible(true);case
}
}
Если это не поможет, попробуйте разбить второй блок invokeLater
на:
SwingUtilities.invokeLater(new Rennable() {
@Override
void run() {
ft.setExtendedState(JFrame.ICONIFIED);
}
SwingUtilities.invokeLater(new Rennable() {
@Override
void run() {
JDialog dlg = new JDialog( ft, "xxx", true );
dlg.setVisible(true);case
}
Это дает Swing возможность ответить на иконизацию, прежде чем передать управление диалогу.