【问题标题】:JButton "stay pressed" after click in Java Applet在Java Applet中单击后JButton“保持按下状态”
【发布时间】:2011-05-24 14:57:26
【问题描述】:

我的 Java Applet 中有一个 JButton。按下它后,ActionListener 必须做出大量的动作。因此,正因为如此,当用户单击按钮时,它会“保持按下”一段时间(有时甚至 5 分钟),而不是立即禁用自身(在这 5 分钟后禁用自身)。

public void actionPerformed(ActionEvent e) {
  JButton.setEnabled(false);
  //...
}

我不希望用户看到。我希望所有这些动作都在后台执行。我能做些什么来实现它?

【问题讨论】:

    标签: java multithreading swing jbutton


    【解决方案1】:

    您应该在另一个线程中执行此类密集任务,而不是调度程序线程。

    一些有用的阅读:Worker Threads and SwingWorker

    【讨论】:

    • 感谢您的回答。不幸的是,定义了几个线程并假设从 actionPerformed() 开始。所以,将所有这些放到另一个线程中并不是一个非常理想的想法,是吗?
    • 您在处理过程中做的第一件事是禁用按钮,最后 - 启用它。它应该禁止用户在处理时单击按钮。
    • @Sorrow:没错。这就是为什么我在开头加上“JButton.setEnabled(false);”。执行所有操作后,按钮再次启用。
    • @Jerry:是的,我错了,我错过了。然而,尽管创建了新线程,但将它交给工作人员应该是解决方案。最后你可能最终需要一些同步。
    • @Jerry,有 5 人支持此答案。这应该可以帮助您感觉更好。
    【解决方案2】:

    问题是 GUI 线程很忙,在处理完成之前不会重新绘制组件

    您可以在后台线程中进行活动。

    【讨论】:

    • 您的第一个建议是正确的,后台线程,但是您关于在 Swing 和 getGraphics 中调用 update 的第二个建议是不正确且具有误导性的。我建议你删除它。
    • 谢谢,我删除了我的反对票并将其改为赞成票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    相关资源
    最近更新 更多