Я разработал простое приложение MIDI, которое позволяет мне воспроизводить ноты 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, у меня что-то похожее работает в C #.
Есть ли какое-то предостережение для потока в Java, которое объясняет поведение, которое я вижу?
(Java API, который я использую, если это поможет - javax.sound.midi )
Спасибо за ваше время.
Edit:
Нажмите еще раз на пользовательский интерфейс и заметите что-то интересное; кажется, что все работает нормально, за исключением двух ComboBox в верхнем левом углу, я пытался удалить их и заменить их, но без разницы. При щелчке блоки изменяются на синий (как обычно), но под ним не отображается раскрывающееся окно, и цвет не возвращается к значению по умолчанию, если фокус находится на другом компоненте пользовательского интерфейса. Может быть, это ошибка, представленная NetBeans?
Пример: * ** 1022 тысячу двадцать одна *
Редактировать 2:
Что ж, после долгих проб и ошибок я наконец нашел причину проблемы, многопоточность отлично работает. Проблема заключалась в том, что NetBeans каким-то образом перенастроил мои компоненты пользовательского интерфейса, в результате чего окно заполнило весь экран, изменение размера вручную, а тестирование ComboBox показало, что они действительно работают нормально.
Спасибо всем за отзывы!