2012-06-16 108 views
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; 
} 

我可以解释你是怎么回事,因为这将帮助ü确定问题。 首先线程进入睡眠......然后我从另一个函数ReplyYes调用这个函数public boolean Wait()它传递值“Y”,然后我尝试恢复线程,但调用t.resume()函数,而不是恢复线程给我一个Java.Lang.Null.PointerException和线程不会恢复导致返回一个FALSE值。另外因为这个线程我甚至不能停止我的服务,我不得不等待线程超时。

任何人都可以解释如何使其正常工作! 谢谢

回答

3

我想你误解Thread.sleep如何工作。这是一种静态方法。

t.sleep(100000);当前线程睡觉,而不是线程t

documentation

原因当前执行的线程(暂停执行)毫秒

重点煤矿指定数量的睡眠。

您应该从该线程启动线程并调用sleep。看到两种不同的方式下面的文章,以启动一个线程:

此外,resume仅适用于具有suspend使用,他们都被弃用。从文档:

已过时。此方法仅适用于suspend(),由于它容易出现死锁,因此不推荐使用此方法。欲了解更多信息,请参阅Why Are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated?

的原因,你得到了NullPointerException可能是因为你尝试之后你打电话t.resume()创建新的Thread对象。所以在那个时候,t的值仍然是null。基本上,您的代码需要从头开始完全重写。我会建议我挂到上面的教程以下,那么一旦你了解如何创建线程移动到下一个章节:

0

首先必须启动新的主题: t.start();然后尝试唤醒您的线程:t.interrupt();

在您的run()方法中调用Thread.sleep(),这会导致睡眠线程调用此方法