Как я могу отследить неизвестную тему / Runnable? - PullRequest
1 голос
/ 15 сентября 2010

Я занимаюсь разработкой Java MIDI-приложения.

И я застрял с отладкой исключения, которое отправляется в конце песни.Как я и ожидал: приложение воспроизводится, и каждый раз, когда я проверяю положение галочки последовательности, чтобы представить его в строке воспроизведения приложения, например, как проигрыватель.

Так что я хочу знать, как я могу получить исходный кодили точка, где этот поток запускается?

Ниже выводится исключение:

Exception in thread "Thread-23" java.lang.IllegalStateException: Sequencer is not open
    at org.tritonus.share.midi.TSequencer.checkOpen(TSequencer.java:296)
    at org.tritonus.share.midi.TSequencer.stop(TSequencer.java:256)
    at org.tritonus.midi.device.java.JavaSequencer.run(JavaSequencer.java:291)
    at java.lang.Thread.run(Unknown Source)

Ответы [ 2 ]

3 голосов
/ 15 сентября 2010

Вы можете установить менеджер безопасности, который разрешает абсолютно все, но выходит из системы, когда запрашивается разрешение на запуск потока.

Или, вы можете предоставить реализацию замены Thread и поставить ее впереди реализации в rt.jar, используя параметры bootclasspath, и этот поток замены записывает свое имя и трассировку стека в своем конструкторе.

1 голос
/ 15 сентября 2010

org/tritonus/midi/device/java/JavaSequencer.java имеет следующий код:

protected void openImpl()
    {
            ...
            m_thread = new Thread(this);
            ...
            m_thread.start();
    }

Так что это одно место для поиска (но это отвечает только на конкретный случай, а не на общий вопрос, как узнать, где начинается потокобщее).

В том же классе есть и другие места, где this.start() называется: в setSequence(..) и setTickPosition(..).Однако могут быть звонки на start() вне класса.

...