0

こんにちは私はスレッドを再開するのに問題があります私のコードは

 public boolean Wait(String Reply){     
        if (Reply.equalsIgnoreCase("Y")){
            try {
                t.resume();
            }
            catch (Exception e){
              System.out.println("\n" + "The exception in resume thread method:::: " + e);                
            }
            System.out.println("\n" + "In the Wait Function of Sender");
            return true;

        }
        JOptionPane.showMessageDialog(j ,
                    "Please Wait While The User Accpets the Trasmission ",
                    "",
                    JOptionPane.INFORMATION_MESSAGE);


       try{
         t = new Thread(this);
         t.sleep(100000);  
        }
       catch (InterruptedException ie){
         System.out.println(ie.getMessage());
       }
    return false;
}

問題を特定するのに役立つので、それがどのように機能するかを説明するかもしれません。最初にスレッドがスリープ状態になります......次に、値「Y」を渡すpublic boolean Wait()という名前の別の関数からこの関数を呼び出してから、スレッドを再開しようとしますが、スレッドを再開する代わりに関数を呼び出すと、スレッドは再開されず、FALSE値が返されます。さらに、このスレッドのために、サービスを停止することすらできません。スレッドがタイムアウトするまで待つ必要があります。ReplyYest.resume()Java.Lang.Null.PointerException

誰かがそれを正しく動作させる方法を説明できますか?ありがとうございました

4

2 に答える 2

3

私はあなたがどのように機能するかを誤解していると思いますThread.sleep。これは静的な方法です。

この行t.sleep(100000);は、スレッドではなく、現在のスレッドをスリープ状態にしますt

ドキュメントから:

現在実行中のスレッドを指定されたミリ秒数の間スリープ(一時的に実行を停止)させます

強調鉱山。

スレッドを開始し、そのスレッドからsleepを呼び出す必要があります。スレッドを開始する2つの異なる方法については、次の記事を参照してください。

さらに、resumeはでのみ使用するためのものでsuspendあり、両方とも非推奨になっています。ドキュメントから:

非推奨。このメソッドsuspend()は、デッドロックが発生しやすいため非推奨となった、でのみ使用するために存在します。詳細については、「Thread.stop、Thread.suspend、Thread.resume、Runtime.runFinalizersOnExitが非推奨になる理由」を参照してください。

を取得する理由NullPointerExceptionは、おそらく、を呼び出したt.resume()に新しいThreadオブジェクトを作成しようとしたためです。したがって、その時点では、tの値はまだですnull。基本的に、コードは最初から完全に書き直す必要があります。上記でリンクしたチュートリアルに従うことをお勧めします。スレッドの作成方法を理解したら、次の章に進んでください。

于 2012-06-16T09:53:23.743 に答える
0

最初に新しいスレッドを開始する必要があります:t.start();次にスレッドをウェイクアップしてみてください:t.interrupt();

Thread.sleep()メソッド内で呼び出すrun()と、このメソッドを呼び出すスレッドがスリープ状態になります

于 2012-06-16T09:54:50.300 に答える