带有Swing UI的Java线程

Jam*_*ing 2 java swing multithreading netbeans

设置线程启动我的MIDI音序器后遇到一些麻烦我决定简单地删除它,虽然它会减慢我的UI速度,但我可以正确使用它.

然而我注意到,即使在播放Sequencer时,UI也非常活跃,即使它播放了大约500个音符,UI也能完美地运行.

现在我知道在C#中,如果你正在做一些密集的事情,建议将它加载到新的Thread上,因为它将释放UI.这是Java中的原理,它让我很困惑.如果是这样,有人可以解释UI是如何被阻止的吗?

谢谢

编辑:

以下代码实际播放序列

public static boolean Play() {
    if(!_sequencer.isRunning()) {
        try {
            _sequencer.setSequence(_sequence);
            _sequencer.start();

            return true;
        } catch (Exception e) {
            Logger.Add(e.getMessage());
        }
    }
    return false;
    //Already running
}
Run Code Online (Sandbox Code Playgroud)

pic*_*ypg 7

是的,这是相同的理论.只有事件线程可以修改UI,因此如果您在该线程上执行任何操作,那么您将阻止其他事件在UI上工作.

将事件线程视为队列可能更容易:

  1. 显示表格
  2. 单击按钮
  3. 做你的工作(Action)
  4. 重置Button的焦点
  5. 更新进度条
  6. 等等

如果#3需要很长时间,那么这可能意味着您的表单会显示为已锁定.显然它完全取决于你对long的定义.一般来说,最好使用Event Thread而不是它.

  • 它甚至被称为[`EventQueue`](http://download.oracle.com/javase/6/docs/api/java/awt/EventQueue.html).:-) (2认同)