【问题标题】:How to make button click block in Java Swing?如何在 Java Swing 中制作按钮单击块?
【发布时间】:2013-03-28 14:14:44
【问题描述】:

我对 Swing 很陌生。

我有

itemActionButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent arg) {
        itemAction();
    }
});

但是当点击按钮时,我希望父表单的线程等到操作完成后再刷新,而不是在另一个线程上运行此操作,允许额外的点击等。

我该怎么做?

【问题讨论】:

  • 我以为你是。从 actionPerformed 内部运行操作将继续阻止 EDT。您可以禁用 e 按钮(单击时),在 SwingWorker 中运行操作并从 SwingWorker 的 done 方法中租用按钮
  • Paul 你能在这里看到吗:stackoverflow.com/questions/8083768/…
  • 如前所述,我在这里运行在主线程中。事实证明,我是从其他地方的 TimerTask 间接调用itemAction()。为了让itemAction() 在主线程上运行,我必须使用SwingUtilities.invokeLater()

标签: java swing user-interface synchronous


【解决方案1】:

ActionListener 中的代码在 EDT 上执行,从而防止 GUI 重新绘制和响应其他事件。

如果您有一个长时间运行的任务并且您不想阻塞 EDT,那么您需要使用另一个线程。

阅读 Concurrency 上的 Swing 教程部分,了解更多信息和使用 SwingWorker 的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2014-05-15
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多