加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Swing按钮不会立即做出反应!我怎么能改变呢?

发布时间:2020-12-15 02:05:43 所属栏目:Java 来源:网络整理
导读:我用Netbeans的可视化编辑器构建了一个表单.当我按下其中一个按钮时,它应该执行以下操作: 将其设置为禁用 执行需要一些时间的任务 当任务完成时,将再次启用该按钮 但是,会发生以下情况: 按钮保持按下状态,直到任务完成 当任务完成时,按钮的启用/禁用将非常
我用Netbeans的可视化编辑器构建了一个表单.当我按下其中一个按钮时,它应该执行以下操作:

>将其设置为禁用
>执行需要一些时间的任务
>当任务完成时,将再次启用该按钮

但是,会发生以下情况:

>按钮保持按下状态,直到任务完成
>当任务完成时,按钮的启用/禁用将非常快(它们会发生,但你不会注意到它们)

这种行为不是我想要的.我尝试在JButton上使用重绘,在JFrame上,甚至在包含按钮的JPanel上,但我似乎无法让它做我想要的.一些提示?

解决方法

当您在按钮回调中工作时,您将停止GUI绘制线程直到它完成.

您需要做的是生成一个线程来执行长时间运行的任务,然后让该线程使用SwingUtilities.invokeLater()在完成时更新UI.不使用invokeLater不是线程安全的,并且通常是糟糕的mojo.

一个基本的例子是:

button.setEnabled(false);
new Thread(new Runnable() {
 public void run() {
  // Do heavy lifting here
  SwingUtilies.invokeLater(new Runnable() {
   public void run() {
    button.setEnabled(true);
   }
  });
 }
}).start();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读