在cancelSelection()之后JFileChooser不会消失

时间:2013-03-29 02:51:47

标签: java swing jfilechooser

我正在尝试关闭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();
}

非常感谢任何帮助。

3 个答案:

答案 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);
}