0

我是一个全新的 android 和 java 极客。所以,请多多包涵。因此,我有以下代码(仅摘录):-

Thread timer=new Thread();
try{
    timer.sleep(2000);
}
catch(InterruptedException e){
    e.printStackTrace();                    
}
finally{
Intent openstartingpoint=new Intent("android.intent.action.START");
startActivity(openstartingpoint);
}

我在 Eclipse 中收到的错误是: -The method sleep() should be accessed in a static way
该应用程序也可以工作。但是,当前活动的文本没有显示。我只有 2 秒钟的空白屏幕。

== 编辑 ==

但是,这段代码一切正常。谁能告诉我为什么?

Thread timer=new Thread(){
public void run(){
    try{
    sleep(5000);
    }
catch(InterruptedException e){
    e.printStackTrace();                    
    }
    finally{
    Intent openstartingpoint=new Intent("android.intent.action.START");
    startActivity(openstartingpoint);
    }
}
};
    timer.start();
4

3 回答 3

4

这只是您收到的警告,因为 sleep 是一个静态方法,它应该被称为,

Thread.sleep(200);

这意味着它将使当前线程休眠 200 毫秒,因此即使您使用对象调用它,它仍然会将当前线程(而不是计时器)置于休眠状态。

情况一:

说你在主线程中,然后打电话

timer.sleep(200);

它会将主线程(正如我所说的当前线程,计时器未启动,当前线程是线程)置于睡眠状态。

但在第二种情况下:您正在创建的新线程(计时器)将进入睡眠状态。这就是区别。

您可以参考 java 文档以获得更好的理解。

于 2013-10-19T13:56:28.240 回答
2

在第一个中,您没有在正确的上下文中调用 sleep() 方法。就像我之前所说的那样,这是 Thread 类中的静态方法,如果您想停止线程一段时间,则必须在 run 方法中调用它。还要小心启动线程的位置以及它是否会更改 GUI,因为它会导致异常。

于 2013-10-19T14:07:04.923 回答
2

调用方法为 Thread.sleep(2000);

sleep 是类 Thread 的静态方法,因此可以直接使用类名访问它。

在下面提到的第二个代码中,您没有收到错误,因为您正在创建一个匿名类,该类以静态方式直接使用 Thread 类调用睡眠方法。

    Thread timer=new Thread()
    {
      public void run(){
         try
            {
              sleep(5000);
            }
    catch(InterruptedException e)
       {
        e.printStackTrace();                    
       }
        finally
        {
        Intent openstartingpoint=new Intent("android.intent.action.START");
        startActivity(openstartingpoint);
        }
      }
    };
        timer.start();
于 2013-10-19T14:21:40.000 回答