我正在处理 j2me 中的 midlet,并且我有这个线程类(比如称为 chan),它只执行以下操作:
public class Chan extends Thread {
public void run(){
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
System.err.println("Chan thread woke up " + ex.toString());
ex.printStackTrace();
System.err.println("Stacktrace end");
}
}
}
我正在尝试 chan.interrupt(); 从仅执行以下操作的主要 midlet 代码:
public void startApp() {
Chan ch = new Chan();
ch.start();
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.err.println("error interrupting: "+ ex.toString());
ex.printStackTrace();
}
ch.interrupt();
}
我收到的是这样的:
Chan thread woke up java.lang.InterruptedException
java.lang.InterruptedException
java.lang.NullPointerException
at org.netbeans.mobility.antext.StackTraceTranslator.getLineNumber(StackTraceTranslator.java:219)
at org.netbeans.mobility.antext.StackTraceTranslator.translate(StackTraceTranslator.java:121)
at org.netbeans.mobility.antext.RunTask$StackTraceTranslatorHandler$1.flush(RunTask.java:780)
at org.netbeans.mobility.antext.RunTask$StackTraceTranslatorHandler$1.run(RunTask.java:826)
at java.lang.Thread.run(Thread.java:722)`
提到的行在 Thread 的 run 方法中:
public void run() {
if (target != null) {
target.run(); <-- 722nd line
}
}
除了奇怪的堆栈跟踪之外,程序中的一切似乎都运行良好。如果我只是删除printStacktrace
in Chan 线程,则不会打印这样的 nullpointerException。
所以我不明白这个 nullpointerexception 试图告诉我什么,也不明白为什么 interruptedexception 的堆栈跟踪是 1 行而其余的跟踪丢失了。
模拟器是 Oracle Java(TM) Platform Micro Edition SDK 3.0.5,我正在使用 Netbeans