gpt4 book ai didi

java - 在单独的线程中运行逻辑仍然锁定 UI - Java

转载 作者:行者123 更新时间:2023-11-30 05:04:10 25 4
gpt4 key购买 nike

我开发了一个简单的 MIDI 应用程序,允许我播放 MIDI 音符,以便用户能够在播放 MIDI 声音时与 UI 进行交互,我已将必要的逻辑放入匿名子类中,如下所示:

public static void Play() 
{
new Thread(new Runnable()
{
public void run()
{
if (!_sequencer.isRunning())
{
try
{
_sequencer.setSequence(_sequence);
_sequencer.start();
}
catch (Exception e)
{
Logger.Add(e.getMessage());
}
}
}
}).start();
}

虽然音乐开始播放,但当我单击组合框时,UI 仍然无法响应,但我在 C# 中也有类似的工作正常。

Java 中的线程是否有某种警告可以解释我所看到的行为?

(我正在使用的 Java API,如果有帮助的话 - javax.sound.midi)

感谢您的宝贵时间。

编辑:

在用户界面上再点击一下,发现一些有趣的东西;除了左上角的两个组合框之外,一切似乎都工作正常,我尝试删除它们并替换它们,但没有什么区别。单击时,这些框会变为蓝色(通常会如此),但下拉框不会出现在其下方,并且当焦点位于另一个 UI 组件上时,颜色不会返回到默认值。这可能是 NetBeans 引入的错误吗?

示例:

enter image description here

编辑2:

经过多次尝试和错误,我终于找到了问题的原因,线程工作得很好。问题是 NetBeans 以某种方式重新调整了我的 UI 组件,导致窗口填满屏幕,手动调整大小并测试 ComboBox 表明它们实际上工作正常。

感谢大家的反馈!

最佳答案

单击组合框时会执行什么操作?它与 _sequencer 交互吗?此外,您的定序器是在 UI 线程上创建的吗?我怀疑当您在单独的线程上调用 start 方法时,定序器仍然在创建它的上下文(即 UI 线程)上运行。

尝试在播放线程(即不是 UI 线程)上创建音序器,看看是否可以释放您的 UI。

关于java - 在单独的线程中运行逻辑仍然锁定 UI - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5690055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com