我的GUI被冻结了

0 java user-interface swing multithreading freeze

我有一些我无法理解的东西:我的Swing GUI包含一个'播放'和'暂停'按钮.我还有一个定义'ON'和'OFF'状态的静态变量.(主程序生成GUI).通过克服'play',我将静态变量的状态更改为'ON',并在一个也修改GUI的线程中启动一个耗时的过程.只要静态变量在同一进程中为'ON'循环.单击"暂停"会将静态变量更改为OFF.但是通过点击"播放",GUI就会冻结,因此:

  1. GUI不会更新
  2. 使用"暂停"按钮无法"暂停"此过程.

我听说过EDT和SwingWorker,但我有一个简单的方法可以做到这一点.

谢谢你的帮助,原谅我的英语不好......

Ken*_*art 6

问题是你正在负责更新GUI的同一个线程上进行密集,耗时的工作.SwingWorker允许您将耗时的任务移动到单独的执行线程中,从而使UI线程不受限制地执行其操作.

但是,它确实增加了一个复杂性:亲和力.在UI组件上调用方法通常需要您从UI线程执行此操作.因此,您需要使用特殊功能从工作线程返回UI线程.SwingWorker还为您提供此功能.

我建议你仔细阅读本文档.