[英]Error in Thread Resuming after it is put to sleep
您好,我在恢復我的代碼的線程時遇到問題
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;
}
我可能會向您解釋它是如何工作的,因為它將幫助您確定問題。 首先,線程進入睡眠狀態……然后,我從另一個名為ReplyYes
函數調用此public boolean Wait()
函數,該函數傳遞值“ Y”,然后嘗試恢復線程,但嘗試t.resume()
函數調用,而不是恢復線程,給了我一個Java.Lang.Null.PointerException
並且該線程沒有恢復,導致返回了FALSE值。 另外由於這個線程,我什至無法停止我的服務,我不得不等待線程超時。
誰能解釋一下如何使其正常工作! 謝謝
我認為您誤解了Thread.sleep
工作原理。 這是一種靜態方法。
行t.sleep(100000);
使當前線程進入睡眠狀態,而不使線程t
進入睡眠狀態。
從文檔中 :
使當前正在執行的線程進入休眠狀態(暫時停止執行)指定的毫秒數
強調我的。
您應該啟動線程並從該線程調用sleep。 有關啟動線程的兩種不同方式,請參見以下文章:
此外, resume
僅與suspend
一起使用,並且都已棄用。 從文檔中:
不推薦使用。 此方法僅可與
suspend()
,該方法已被棄用,因為它容易死鎖。 有關更多信息,請參見為什么不贊成使用Thread.stop,Thread.suspend,Thread.resume和Runtime.runFinalizersOnExit?
出現NullPointerException
的原因可能是因為您嘗試在調用t.resume()
之后創建新的Thread對象。 因此,此時t仍為null
。 基本上,您的代碼需要完全從頭開始重寫。 我建議遵循上面鏈接的教程,一旦您了解如何創建線程,請轉到下一章:
首先,您必須啟動新線程: t.start();
然后嘗試喚醒您的線程: t.interrupt();
在run()
方法中調用Thread.sleep()
,這會導致休眠線程調用此方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.