1

我开发了一个简单的 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 周围多点击一下,发现一些有趣的东西;除了最左上角的两个组合框外,一切似乎都运行良好,我尝试删除它们并替换它们,但没有任何区别。单击时,框会变为蓝色(正常情况下),但下拉框不会出现在其下方,并且当焦点位于另一个 UI 组件上时,颜色不会恢复为默认值。这可能是 NetBeans 引入的错误吗?

例子:

在此处输入图像描述

编辑2:

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

感谢大家的反馈!

4

2 回答 2

2

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

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

于 2011-04-17T03:10:06.000 回答
0

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

于 2011-04-17T16:43:49.270 回答