0

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

任何帮助深表感谢。

4

3 回答 3

3

您应该使用Swing Timer来执行此操作,因为对 GUI 的更新应该在事件调度线程 (EDT) 上完成。

您需要在调用 showOpenDialog() 方法之前启动 Timer。

于 2013-03-29T03:01:48.407 回答
2

在做出选择或取消对话框之前,调用showOpenDialog()不会返回。如果要在超时后关闭对话框,则必须在另一个线程中进行计时。

于 2013-03-29T02:55:27.960 回答
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);
}
于 2013-03-29T04:00:41.880 回答