当前位置:  开发笔记 > 编程语言 > 正文

摆动按钮不会立即反应!我怎么能改变呢?

如何解决《摆动按钮不会立即反应!我怎么能改变呢?》经验,为你挑选了2个好方法。

我用Netbeans的可视化编辑器构建了一个表单.当我按下其中一个按钮时,它应该执行以下操作:

将其设置为禁用

执行需要一些时间的任务

任务完成后,该按钮将再次启用

但是,会发生以下情况:

按钮保持按下状态,直到任务完成

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

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



1> Allain Lalon..:

当您在按钮回调中工作时,您将停止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();



2> Paul Tomblin..:

当你在一个按钮回调中做事时,你实际上是在停止gui绘画线程 - 不只是为了按钮,而是为了任何gui绘画.(尝试用另一个窗口覆盖界面,然后再次曝光 - 在任务完成之前不会重新绘制!)

你需要做的是产生一个线程来执行长时间运行的任务,然后让该线程使用SwingUtilities.invokeLater()来启用按钮.invokeLater强制按钮启用在gui绘制线程中发生.

在长时间运行的线程运行时,您可能需要设置忙碌光标或以其他方式锁定接口.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有