我怎么能跟踪未知的Thread / Runnable?

时间:2010-09-15 16:57:07

标签: java exception midi

我正在开发Java MIDI应用程序。

我一直坚持调试异常,在歌曲结束时调度。正如我所期待的那样:应用程序正在播放,每次我都在检查顺序节拍位置以在应用程序播放行中表示它,就像播放器一样。

所以我想知道如何获得此Thread开始运行的源或点?

以下是一个例外输出:

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 个答案:

答案 0 :(得分:3)

您可以安装一个绝对允许所有内容的安全管理器,但在被要求获得启动线程的权限时会注销。

或者,您可以使用bootclasspath选项提供替换的Thread实现并将其置于rt.jar中的实现之前,并将此替换Thread在其构造函数中记录其名称和stacktrace。

答案 1 :(得分:1)

org/tritonus/midi/device/java/JavaSequencer.java包含以下代码:

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

所以这是一个值得寻找的地方(但这只回答了具体的情况,而不是一般的问题,如何找出线程一般在哪里开始)。

在同一个班级中还有其他地方调用this.start()setSequence(..)setTickPosition(..)。但是,可以在班级外调用start()