[英]Java Thread program not working
我編寫了一個示例Java線程程序,但是它顯示Error如下
java.lang.Error: Unresolved compilation problem: The constructor Thread(Test) is undefined
顯示Test類不是可運行的類。 我推薦了許多網站,但沒有得到解決方案,它顯示出我所做的工作是正確的。
我的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方法未在其中調用任何這些方法。 這些因素有什么問題嗎?
該線程演示與另一類僅包含sysout()的包含run()的Runnable實現良好配合。 但是正如我所說的,我的Test類包含許多進一步引用其他jar的方法,但是到目前為止,在Test類的run()方法中尚未調用它。 當我使用new Thread(new Test())。start(); Eclipse顯示非法參數或帶有錯誤的Cast to Runnable參數建議。 然后,我進行了轉換,並得到了以上錯誤。 是否存在與使用任何類型的jar和變量的類的運行線程相關的問題?
提前致謝。
據我估計,上面列出的文件格式正確。 該問題可能是由於jar文件中的類路徑中包含另一個名為“ Test.java”的文件引起的。 似乎不太可能,但是我將列出的類放入編譯器中並且它們可以工作,因此問題似乎一定存在於其他地方。
重命名您的Test.java,看看是否仍然有問題。
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
}
}
應該聲明您的類以實現Runnable
,如下所示:
class Test implements Runnable {
@Override
public void run() {
...
}
}
查找其中存在Test類的第三方jar的編譯級別,以及用於程序的編譯目標。
所以你的測試課應該看起來像
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
如上例中的call method can return values
(long a)
要創建線程,您需要聲明一個實現Runnable接口的類。 然后,該類實現run方法。 然后可以分配該類的實例,在創建Thread時將其作為參數傳遞並啟動。
在您的代碼中,您需要一個像這樣的類。
class Test implements Runnable {
..
}
那么您需要分配一個新的線程對象並啟動它,就可以做到這一點。
Thread(new Test()).start();
在這里查看更多詳細信息
無需實例化新的Thread對象,您可以執行new Test()。schedule();。 它會自己作為線程啟動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.