Java线程程序不工作
我编写了一个示例java线程程序,但它显示了如下错误Java线程程序不工作,java,eclipse,multithreading,constructor,Java,Eclipse,Multithreading,Constructor,我编写了一个示例java线程程序,但它显示了如下错误 java.lang.Error:未解决的编译问题:构造函数线程(测试)未定义 显示测试类不是可运行类。我参考了很多网站,但没有得到解决方案,它显示了我所做的是正确的。我的java代码: public class ThreadDemo { public static void main(String args[]) { new Thread(new Test()).start(); } } Tes
java.lang.Error:未解决的编译问题:构造函数线程(测试)未定义
显示测试类不是可运行类。我参考了很多网站,但没有得到解决方案,它显示了我所做的是正确的。我的java代码:
public class ThreadDemo {
public static void main(String args[]) {
new Thread(new Test()).start();
}
}
Test.java
类文件实现了Runnable
,位于jar
文件中,我作为库包含在eclipse
中的项目中。
这有什么问题吗?Test.java
public class Test implements Runnable {
@Override public void run() {
Sysout("Test");
}
}
测试类包含许多其他方法,这些方法使用项目中其他jar中的许多其他类,但run方法不调用其中的任何一个方法。这些因素有问题吗?
此线程演示程序与另一个类实现Runnable配合使用,该类实现仅包含带有sysout()的run()。但正如我所说的,我的测试类包含了许多方法,这些方法进一步引用了其他JAR,但直到现在它还没有在测试类的run()方法中被调用。当我使用新线程(newtest()).start()时;Eclipse显示非法参数或强制转换为可运行参数建议,但有错误。然后我把那个铸件放在上面,得到了上面的错误。运行使用任何类型JAR和变量的类的线程是否有任何问题
提前谢谢 您的类应该声明为实现
Runnable
,如下所示:
class Test implements Runnable {
@Override
public void run() {
...
}
}
您的类应该声明为实现
Runnable
,如下所示:
class Test implements Runnable {
@Override
public void run() {
...
}
}
构造函数需要(实现可运行接口的任何类)作为参数。此编译错误表明参数类未实现可运行接口。
如果你做了必要的事情,编译器不会抱怨
例如:
public class Test implements Runnable { // Will make this class Runnable
@override
public void run() { // Body of the thread
// work the thread needs to do
}
}
构造函数需要(实现可运行接口的任何类)作为参数。此编译错误表明参数类未实现可运行接口。
如果你做了必要的事情,编译器不会抱怨
例如:
public class Test implements Runnable { // Will make this class Runnable
@override
public void run() { // Body of the thread
// work the thread needs to do
}
}
查找存在测试类的第三方jar的编译级别以及您用于程序的编译目标。查找存在测试类的第三方jar的编译级别以及您用于程序的编译目标。因此,您的测试类应该如下所示
public Class Test implements Runnable{
@Override
public void run(){
// TODO this auto generated code
}
}
因此,当您调用start()
方法时,新线程将从run()
方法开始执行
Another Approach:
您可以将线程类扩展为
public Class Test extends Thread{
@Override
public void run(){
// TODO this auto generated code
}
}
但它通常不使用,因为在java中只能扩展一个类。因此,如果扩展Thread类,则不能扩展应用程序中的任何其他类
Yet Another Approach:
您还可以实现与第一种情况相同的可调用接口,其中可运行接口为
public Class Test implements Callable{
@Override
public long call(){
// TODO this auto generated code
long a= 3.14xxxxxxxx;
return a;
}
}
主要区别在于,在Runnable接口中,不能从run方法返回任何东西,即返回类型为void
在Callble接口中,
call方法可以返回值
,如上例(长a)`所示
public Class Test implements Runnable{
@Override
public void run(){
// TODO this auto generated code
}
}
因此,当您调用start()
方法时,新线程将从run()
方法开始执行
Another Approach:
您可以将线程类扩展为
public Class Test extends Thread{
@Override
public void run(){
// TODO this auto generated code
}
}
但它通常不使用,因为在java中只能扩展一个类。因此,如果扩展Thread类,则不能扩展应用程序中的任何其他类
Yet Another Approach:
您还可以实现与第一种情况相同的可调用接口,其中可运行接口为
public Class Test implements Callable{
@Override
public long call(){
// TODO this auto generated code
long a= 3.14xxxxxxxx;
return a;
}
}
主要区别在于,在Runnable接口中,不能从run方法返回任何东西,即返回类型为void
在Callble接口中,call方法可以返回值
,如上例所示(长a)`
要创建线程,您需要声明一个实现
可运行接口。该类然后实现run方法。一
然后可以分配类的实例,并将其作为参数传递
创建线程时,启动
在代码中,您需要这样一个类
然后你需要分配一个新的线程对象并启动它,你可以这样做
寻找更多细节
要创建线程,您需要声明一个实现
可运行接口。该类然后实现run方法。一
然后可以分配类的实例,并将其作为参数传递
创建线程时,启动
在代码中,您需要这样一个类
然后你需要分配一个新的线程对象并启动它,你可以这样做
查看更多详细信息根据我的估计,上面列出的文件格式正确。这个问题可能是由于在jar文件的类路径中有另一个名为“Test.java”的文件引起的。这似乎不太可能,但我将列出的类放入了我的编译器中,它们可以正常工作,所以问题似乎一定在别处
重命名Test.java,看看是否还有问题。据我估计,上面列出的文件格式正确。这个问题可能是由于在jar文件的类路径中有另一个名为“Test.java”的文件引起的。这似乎不太可能,但我将列出的类放入了我的编译器中,它们可以正常工作,所以问题似乎一定在别处
重命名Test.java,看看是否仍然存在问题。您可以执行new Test().schedule(),而不是实例化新的线程对象;它将自己作为线程启动 您可以执行new Test().schedule(),而不是实例化新的线程对象;它将自己作为线程启动 你的导入是什么?线程构造函数需要一个可运行的对象。测试类是否为可运行类型?发布Test.java文件