在线程中使用isFocused()时出错?

时间:2012-01-09 18:46:11

标签: java multithreading

我有一个小问题 - 我有一个线程聊天客户端,我想为此创建一个警报(哔声)。只要窗口未对焦并收到消息,就会触发警报。现在我只是试图显示一条消息,无论焦点状态如何。如果这样做,我可以用Toolkit.getDefaultToolkit().beep();替换print语句。

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)

我不知道为什么会发生这种情况,并希望得到任何帮助。 谢谢。

1 个答案:

答案 0 :(得分:1)

对象Jfrm(JFrame):

if(Jfrm.isFocused())

可能是null

在调用方法之前,确保你确实有一个有效的对象。