ユーザーが MIDI サウンドの再生中に UI を操作できるようにするために、MIDI ノートを再生できるシンプルな MIDI アプリケーションを開発しました。必要なロジックを次のような匿名サブクラスに配置しました。
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();
}
たとえば、ComboBox をクリックすると、音楽が再生され始めますが、UI はまだ応答しません。
私が見ている動作を説明する、Java でスレッド化するための警告はありますか?
(役立つ場合は使用している Java API - javax.sound.midi )
御時間ありがとうございます。
編集:
UI をもう少しクリックしてみると、興味深いことがわかりました。左上隅にある 2 つの ComboBoxes を除いて、すべて正常に動作しているようです。それらを削除して置き換えてみましたが、違いはありません。クリックすると (通常どおり) ボックスが青に変わりますが、ドロップダウン ボックスはその下に表示されず、フォーカスが別の UI コンポーネントにある場合、色はデフォルトに戻りません。おそらく NetBeans によって導入されたバグでしょうか?
例:
編集2:
多くの試行錯誤の末、ようやく問題の原因を見つけました。スレッドはうまく機能します。問題は、NetBeans が何らかの方法で UI コンポーネントを再調整したため、ウィンドウが画面いっぱいになり、ComboBox のサイズを手動で変更してテストすると、実際に正常に動作することが示されました。
みんなのフィードバックに感謝します!