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から他の多くのクラスを使用している他の多くのメソッドが含まれていますが、実行メソッドはこれらのメソッドを呼び出していません。これらの要因に問題はありますか?

このスレッドのデモは、sysout() のみで run() を含む Runnable を実装する別のクラスでうまく機能しています。しかし、私が言ったように、他のjarをさらに参照する多くのメソッドを含む私のTestクラスは、今までTestクラスのrun()メソッドで呼び出されていません。new Thread(new Test()).start(); を使用したとき Eclipse が不正な引数を表示するか、Cast to Runnable 引数の提案をエラーで表示します。次に、そのキャストを入れて、上記のエラーを取得しました。任意のタイプの jar と変数を使用するクラスのスレッドの実行に関連する問題はありますか?

前もって感謝します。

4

7 に答える 7

0

スレッドを作成するには、Runnable インターフェイスを実装するクラスを宣言する必要があります。 次に、そのクラスは run メソッドを実装します。その後、クラスのインスタンスを割り当て、Thread の作成時に引数として渡して、開始することができます。

ここのコードでは、このようなクラスが必要です。

class Test implements Runnable {
..
}

次に、新しいスレッド オブジェクトを割り当てて開始する必要があります。これを行うことができます。

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

詳細はこちら

于 2013-10-17T06:22:58.353 に答える
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

新しい Thread オブジェクトをインスタンス化する代わりに、new Test().schedule(); を実行できます。それ自体がスレッドとして起動します。

于 2013-10-17T17:16:18.473 に答える
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 では 1 つのクラスしか拡張できないため、通常は使用されません。そのため、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 に答える