簡體   English   中英

Java線程程序不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM