我正在尝试关闭JFileChooser。请问,请告诉我为什么以下代码段中的cancelSelection方法在5秒后没有消失:
public static void main(String [] args){
JFrame frame = new JFrame();
frame.setVisible(true);
final JFileChooser fchooser = new JFileChooser();
fchooser.showOpenDialog(frame);
try {Thread.sleep(5000);} catch (Exception e){}
fchooser.cancelSelection();
}
非常感谢任何帮助。
答案 0 :(得分:3)
您应该使用Swing Timer来执行此操作,因为GUI的更新应该在事件调度线程(EDT)上完成。
你需要在调用showOpenDialog()方法之前启动Timer。
答案 1 :(得分:2)
在进行选择或取消对话框之前,对showOpenDialog()
的调用不会返回。如果要在超时后关闭对话框,则必须在另一个线程中执行计时。
答案 2 :(得分:2)
我同意您应该使用Swing Timer,但是如果您想要更多逻辑来禁用/关闭对话框(例如,当没有更多数据可用时应该关闭的进度条),请实现SwingWorker或使用以下内容:
public static void main(String... args) {
JFrame frame = new JFrame();
frame.setVisible(true);
final JFileChooser fchooser = new JFileChooser();
new Thread() {
@Override
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// This is run in EDT
fchooser.cancelSelection();
}
});
}
} .start();
fchooser.showOpenDialog(frame);
}