0

我编写了一个示例 java 线程程序,但它显示错误如下

java.lang.Error: Unresolved compilation problem: The constructor Thread(Test) is undefined

显示测试类不是可运行的类。我参考了许多网站,但没有得到解决方案,它显示我所做的事情是正确的。
我的Java代码:

public class ThreadDemo {  
       public static void main(String args[]) {  
        new Thread(new Test()).start();
    }
}

Test.java类文件实现Runnable,在一个jar文件中,我作为一个库包含在我的项目中eclipse。有什么问题吗?
测试.java

public class Test implements Runnable {  
       @Override public void run() {  
        Sysout("Test");
    }
}

测试类包含许多其他方法,这些方法正在使用项目中其他 jar 中的许多其他类,但运行方法没有在其中调用任何这些方法。这些因素有什么问题吗?

该线程演示与另一个类实现了 Runnable 一起工作,该类仅包含 run() 和 sysout()。但正如我所说,我的 Test 类包含许多方法,这些方法进一步引用了其他 jar,但直到现在它还没有在 Test 类的 run() 方法中调用。当我使用 new Thread(new Test()).start(); Eclipse 显示非法参数或 Cast to Runnable 参数建议错误。然后我放了那个铸件并得到了上述错误。是否存在与使用任何类型的 jar 和变量的类的运行线程相关的任何问题?

提前致谢。

4

7 回答 7

3

据我估计,上面列出的文件格式正确。问题可能是由于 jar 文件的类路径中有另一个名为“Test.java”的文件引起的。这似乎不太可能,但我将列出的类放入我的编译器并且它们可以工作,所以问题似乎必须在其他地方。

重命名您的 Test.java 并查看是否仍有问题。

于 2013-10-17T06:42:23.157 回答
2

Thread 类 构造函数需要Runnable 对象(任何实现 Runnable 接口的类)作为参数。此编译错误表明您的参数类未实现 Runnable 接口。

如果你做了必要的事情,编译器不会抱怨。

例子:

public class Test implements Runnable { // Will make this class Runnable
@override
public void run() { // Body of the thread
// work the thread needs to do
}
}
于 2013-10-17T06:06:08.670 回答
0

你的类应该被声明为实现Runnable,如下所示:

class Test implements Runnable { 
  @Override
  public void run() {
    ...
  }
}
于 2013-10-17T06:03:19.153 回答
0

查找存在 Test 类的第三方 jar 的编译级别以及您用于程序的编译目标。

于 2013-10-17T06:11:27.617 回答
0

所以你的测试类应该看起来像

public Class Test implements Runnable{
@Override
public void run(){
     // TODO this auto generated code 
    }
}

所以当你调用start()方法时,新线程将从run()方法开始执行

Another Approach:

你可以extend the Thread class作为

 public Class Test extends Thread{
    @Override
    public void run(){
         // TODO this auto generated code 
        }
    }

但它通常不使用,因为在 java 中只能扩展一个类。因此,如果您扩展 Thread 类,那么您不能在应用程序中扩展任何其他类。

Yet Another Approach:

您还可以使用 Runnable 接口实现与第一种情况相同的可调用接口

public Class Test implements Callable{
@Override
public long call(){
     // TODO this auto generated code 
     long a= 3.14xxxxxxxx;
     return a;  
    }
}

主要区别在于,在 Runnable 接口中,您不能从 run 方法返回任何东西,即return type is void

而在Callble接口call method can return values中,如上例(long a)`

于 2013-10-17T06:16:08.483 回答
0

要创建线程,您需要声明一个实现 Runnable 接口的类。 然后该类实现 run 方法。然后可以分配一个类的实例,在创建线程时作为参数传递,然后启动。

在您的代码中,您需要这样的类。

class Test implements Runnable {
..
}

然后你需要分配一个新的线程对象并启动它,你可以这样做。

Thread(new Test()).start();

这里了解更多详情

于 2013-10-17T06:22:58.353 回答
0

您可以执行 new Test().schedule(); 而不是实例化一个新的 Thread 对象。它将自己作为线程启动。

于 2013-10-17T17:16:18.473 回答