2

我创建了一个名为Threadimplements的类,但由于某种原因Runnable我无法调用start()or方法。sleep()每当我尝试这样做时,我都会收到错误消息,指出这些方法未为该类定义,并建议我创建它们。所以我创建了一个新项目并复制了一个示例代码,看看我自己的代码是否有问题,我收到了同样的错误。这是示例代码:

class Thread implements Runnable {
    private int a;
    public Thread (int a) {
        this.a = a;
    }
    public void run() {
        for (int i = 1; i <= a; ++i) {
            System.out.println(Thread.currentThread().getName() + " is " + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {}
        }
    }
}

这是我自己的代码:

public class Thread extends PID implements Runnable {
    public Thread() {};                      // Empty constructor for thread object
    public void run() {
        Random gen = new Random();           // Generates random values
        int sleepTime;                       // Sleep time
        sleepTime = gen.nextInt(60 - 1) + 1; // Generates random sleep time between 1 and 60 seconds
        try {
            Thread.sleep();
        } catch (Exception e) {
            System.out.println(e);
        } 
        System.out.println("The thread has been terminated");
    }
}
4

3 回答 3

8

要修复您当前的错误,只需将您的Thread类重命名为MyThread(或其他),因为您的Thread类隐藏了java.lang.Thread该类。

如果您想坚持使用Thread,则必须使用完全限定名称,java.lang.Thread如下所示:

try{
    java.lang.Thread.sleep(1000);
    // ...
于 2013-06-10T14:33:56.153 回答
0

错误

  1. 将类名从 更改ThreadMyThread
  2. run()调用时调用start(). start()使用类对象调用。
  3. Thread.sleep();需要一个论据说,sleepTime

这是我认为你想要做的代码。在 Eclipse Juno JDK 1.7 上测试

import java.util.Random;

class NewThread implements Runnable {

    public NewThread () {
    }
    public void run() {
        Random gen = new Random();           // Generates random values
        int sleepTime;                       // Sleep time
        sleepTime = gen.nextInt(60 - 1) + 1; // Generates random sleep time between 1 and 60 seconds

        try {
            Thread.sleep(sleepTime);
        } catch (Exception e) {
            System.out.println(e);
        } 
        System.out.println("The thread has been terminated");
    }
}

class MyThread {

    public static void main(String[] args) {
        NewThread t = new NewThread();
        Thread t1 = new Thread(t);
        t1.start();

    }
}

输出

线程已终止

于 2013-06-10T17:26:22.723 回答
0

接口 Runnable 没有方法 start() 和 sleep(),所以要小心。接口 Runnable 只有 run() 方法,Java API 建议“如果你只打算重写 run() 方法而不是其他 Thread 方法,应该使用 Runnable 接口。” 在此处查看 Java API 的 Runnable 文档:http: //docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html
在所有其他情况下,您的类应该扩展类 Thread。

于 2015-01-25T00:14:06.197 回答