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;
}

我可能会向您解释它是如何工作的,因为它将帮助您确定问题。首先线程进入睡眠状态......然后我public boolean Wait()从另一个名为“Y”的函数调用这个函数,然后ReplyYes我尝试恢复线程但是t.resume()函数调用,而不是恢复线程给了我一个Java.Lang.Null.PointerException并且线程未恢复,导致返回 FALSE 值。另外,由于这个线程,我什至无法停止我的服务,我必须等待线程超时。

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

4

2 回答 2

3

我想你误解了它Thread.sleep的工作原理。它是一种静态方法。

t.sleep(100000);行使当前线程进入睡眠状态,而不是线程t

文档中:

使当前正在执行的线程休眠(暂时停止执行)指定的毫秒数

强调我的。

您应该启动线程并从该线程调用 sleep 。有关启动线程的两种不同方法,请参阅以下文章:

此外,resume仅用于与它们一起使用suspend并且它们都已被弃用。从文档中:

已弃用。此方法仅用于 with suspend(),已被弃用,因为它容易死锁。有关详细信息,请参阅为什么不推荐使用 Thread.stop、Thread.suspend、Thread.resume 和 Runtime.runFinalizersOnExit?

您得到 a 的原因NullPointerException可能是因为您调用t.resume(). 所以在那个时候, t 仍然有值null。基本上,您的代码需要从头开始完全重写。我建议按照上面链接的教程进行操作,然后在您了解如何创建线程后转到下一章:

于 2012-06-16T09:53:23.743 回答
0

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

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

于 2012-06-16T09:54:50.300 回答