我收到错误:对于Thread类型,方法sleep(int)是未定义的。我认为sleep方法在Java中的Thread类中。
import java.util.Random;
public class Thread implements Runnable {
String name;
int time;
Random r = new Random();
public Thread(String s){
name = s;
time = r.nextInt(999);
}
public void run() {
try{
System.out.printf("%s is sleeping for %d\n", name, time);
Thread.sleep(time);
System.out.printf("%s is done", name);
} catch(Exception e ) {
}
}
}
答案 0 :(得分:18)
您实施了自己的名为Thread
的类,并尝试在其上调用sleep
,但失败了,因为您的班级中未定义sleep
。你的课程基本上影响了java的Thread
类。
以不同的方式打电话给您的班级(例如。MyThread
或更好MyRunnable
,如owlstead所述)或直接致电java.lang.Thread.sleep()
。
答案 1 :(得分:5)
它不在你的 Thread
课程中。
由于您将类命名为Thread
,因此Java将查找Thread.sleep
。如果您想要内置于Java中的函数,请尝试java.lang.Thread.sleep(time);
。
答案 2 :(得分:2)
您的类名“Thread”与Java标准库中的Thread类冲突。更改班级的名称,它将解决所有问题。
答案 3 :(得分:2)
你得到这个的原因是你已经实现了自己的Thread类。在你班上没有睡眠方法。
首先要避免使用属于标准Java库的类名。
如果您坚持保留名称,请使用java.lang.Thread.sleep(...)指定您希望Java提供的Thread类。
答案 4 :(得分:1)
完全限定Thread
,因为您尝试使用java.lang.Thread
,而不是您自己的。{/ p>
答案 5 :(得分:1)
问题是您的类名为Thread
,它没有sleep()
方法。睡眠方法位于java.lana.Thread
,您的班级正在隐藏它。
答案 6 :(得分:0)
这个问题的答案已经发布了另一个类比。它可能不是直接的答案,但可以帮助您消除混淆为什么避免重用平台类的名称,并且永远不要重用java.lang 中的类名,因为这些名称会自动导入到任何地方。
程序员习惯于以不合格的形式看到这些名称
自然地假设这些名称引用了java.lang
中熟悉的类。如果
如果重用其中一个名称,则非限定名称将引用新定义
任何时候它都在自己的包装内使用。
一个名称可用于引用不同包中的多个类。以下简单的代码片段探讨了重用平台类名时会发生什么。你是什么
认为它呢?看它。它重用String
包中的java.lang
类。试一试。
package test;
final class String
{
private final java.lang.String s;
public String(java.lang.String s)
{
this.s = s;
}
@Override
public java.lang.String toString()
{
return s;
}
}
final public class Main
{
public static void main(String[] args)
{
String s = new String("Hello world");
System.out.println(s);
}
}
这个程序看起来很简单,如果有点令人厌恶。中的班级String
未命名的包只是java.lang.String
实例的包装器。它似乎
该程序应打印 Hello world 。但是,如果您尝试运行该程序,
你发现你做不到。 VM会发出如下错误消息:
Exception in thread "main" java.lang.NoSuchMethodError: main
如果您使用的是NetBeans IDE,则只会阻止该程序运行。您会收到消息找不到主要课程。
VM无法找到main
方法,因为它不存在。虽然
Main
有一个名为main
的方法,它的签名错误。一种主要方法
必须接受一个字符串数组的参数。什么的
VM很难告诉我们Main.main
接受 我们的字符串 的数组
class,与java.lang.String
没有任何关系。
结论:如上所述,请始终避免重复使用java.lang
包中的平台类名称。