2012-01-09 11 views
0

私は小さな質問があります - 私は警告(ビープ音)を作りたいと思うスレッドチャットクライアントがあります。ウインドウがフォーカスされておらず、メッセージが受信されると、警告がトリガされます。今は、フォーカス状態に関係なく、メッセージを表示しようとしています。これがうまくいけば、print文を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) 

を与えています与えられた助けを感謝するでしょう。おかげさまで

+0

ChatClient.javaの284行目は何ですか?これはおそらくnullオブジェクトのメソッドを呼び出す場所です。また、バックグラウンドスレッドでSwingコンポーネントを使用することはできません。すべてのSwingコンポーネントは、EDTからアクセスする必要があります。 http://docs.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading –

+0

コードで参照されている変数の1つがnullです。最良の方法は、デバッガを使ってどのデバッガを見つけるかです。 – Perception

+0

284行はif文で、check isFocused()です。提案のおかげで、私はそれを知っていませんでした。それは変更されます。 run()メソッド。 Thnks – Nikhar

答えて

1

オブジェクトJfrm(JFrameの):

if(Jfrm.isFocused()) 

はおそらくnullです。

その上でメソッドを呼び出す前に、あなたが実際に有効なオブジェクトを持っていることを確認してください。

+0

それについてもっと詳しく説明できますか?なぜこのスレッドでエラーが発生したのですか?whileループを持つ独立した単純なJavaプログラムのウィンドウに対して、同じisFocusedをチェックしました。それは正常に働いた。 – Nikhar

関連する問題