我有一个小问题 - 我有一个线程聊天客户端,为此我想创建一个警报(嘟嘟声)。只要窗口不在焦点并收到消息,警报就会被触发。现在,我只是试图显示一条消息,无论焦点状态如何。如果这样做,我可以用Toolkit.getDefaultToolkit().beep();
替换打印语句。在线程内使用isFocused()时出错?
public class IncomingReader implements Runnable {
public void run() {
String message;
Font font = new Font("Verdana", Font.BOLD, 11);
JTarea.setFont(font);
try {
while ((message = reader.readLine()) != null) {
//checkFocus();
if (Jfrm.isFocused()) {
System.out.println("focused");
} else {
System.out.println("not focused");
}
JTarea.append(message + "\n");
}
} catch (Exception ex) {
System.out.println("errror run()");
ex.printStackTrace();
}
}
}
现在,每当我这样做,否则,我创建相同的代码checkFocus()
一个函数,编译器是给我一个
java.lang.NullPointerException
at ChatClient$IncomingReader.run(ChatClient.java:284)
at java.lang.Thread.run(Unknown Source)
我没有任何想法,为什么这种情况正在发生并希望得到任何帮助。 谢谢。
ChatClient.java的第284行是什么?这是您可能在空对象上调用方法的地方。另外:您不可以在后台线程中使用Swing组件。所有Swing组件必须从EDT访问。阅读http://docs.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading – 2012-01-09 18:55:08
代码中引用的变量之一是null。最好的办法是使用调试器来找出哪一个。 – Perception 2012-01-09 18:57:13
284行是if语句,它是检查isFocused()..谢谢你的建议,我不知道,会改变这一点,我认为这就是为什么我得到这么多的错误,当我改变一个小代码在run()方法。 Thnks – Nikhar 2012-01-09 18:58:48