2017-03-26 2 views
-1

java.lang.RunnableからRunnableを実装しているクラスのオブジェクトからスレッドを作成しようとしていますが、スレッドが動作しません。Runnableオブジェクトを使用してスレッドを作成する

[email protected]:~/Desktop/java_prog$ javac Runnable.java 
Runnable.java:27: error: no suitable constructor found for Thread(counter,String) 
    Thread td=new Thread(obj,"bac"); 
      ^
constructor Thread.Thread(Runnable,AccessControlContext) is not applicable 
    (argument mismatch; counter cannot be converted to Runnable) 
constructor Thread.Thread(ThreadGroup,Runnable) is not applicable 
    (argument mismatch; counter cannot be converted to ThreadGroup) 
constructor Thread.Thread(ThreadGroup,String) is not applicable 
    (argument mismatch; counter cannot be converted to ThreadGroup) 
constructor Thread.Thread(Runnable,String) is not applicable 
    (argument mismatch; counter cannot be converted to Runnable) 
Note: Some messages have been simplified; recompile with - Xdiags:verbose to get full output 
1 error 

これはエラーです。次のように コードがある.........

import java.io.*; 
interface Runnable{ 
public void run(); 
} 
class counter implements Runnable { 
Thread t=Thread.currentThread(); 
private int x; 
public counter(){x=0;} 
public int getval(){return x;} 
public void run() 
{ 
    try{ 
    while(x<5){ 
     System.out.println(t.getName()+ ":" + (x++)); 
     Thread.sleep(250); 
    } 
    System.out.println("Exit from thread:"+t);} 
    catch(InterruptedException e){ 
     System.out.println("InterruptedException"); 
    } 
} 
} 
class client { 
public static void main(String args[]) 
{ 
    counter obj=new counter(); 
    Thread td=new Thread(obj,"bac"); 
    td.start(); 
    int val; 
    try{ 
    do{ 
     val=obj.getval(); 
     System.out.println(td.getName()+ ":" + val); 
     val=6; 
     Thread.sleep(1000); 
    }while(val<5); 
    } 
    catch(InterruptedException e) 
    { 
     System.out.println("InterruptedException 2"); 
    } 
    System.out.println("Exit from thread:"+td.getName()); 
    } 
} 

iは、任意のスレッドのコンストラクタを作成する必要がありますか。? または、私はjava.langライブラリからRunnableクラスにアクセスしますか? ここに問題がありますか?

+0

最初に、すでに定義済みのインタフェースRunnableが既に存在します。定義済みの名前は上書きしないでください。その後、あなたは超基本的なものに問題があります...もっと簡単な例に取りかかることをお勧めします。申し訳ありませんが、あなたのコードは間違いを完全に混乱させます。 – GhostCat

+0

大丈夫です。私はそれを改善します。 –

答えて

0

スレッドコンストラクタを作成する必要がありますか。または私は java.langライブラリからRunnableクラスにアクセスしますか?何が問題なの?

あなたはjava.lang.Threadコンストラクタを呼び出すことによって、およびjava.lang.Runnable型のオブジェクトを提供することにより、Threadオブジェクトを作成する必要があります。 Threadクラスの設計者hereをご覧になることをお勧めします。

ありThreadオブジェクトを作成するために使用することができjava.lang.Thread APIのコンストラクタの他のフレーバー(過負荷状態)がありますが、そもそも、あなたは今のThread(Runnable target, String name)に焦点を当て、それを理解することができます(それはあなたが使用することを試みているものですあなたのコード)。

あなたのコードの問題は、あなたが該当するエラーを独自のRunnableタイプのオブジェクトを作成しようとし、その後java.lang.Threadのコンストラクタに渡す、そのあなたがThread.Thread(Runnable,AccessControlContext)に直面しているので、されていないということです。

問題を解決するには、Runnableインターフェイス定義を削除し、1つのJDK、つまりjava.lang.Runnableを使用するだけです。つまり、java.lang.Threadクラスにはjava.lang.Runnableインターフェイスのコンストラクタが含まれており、ThreadクラスはRunnableオブジェクトを受け入れません。

また、Java命名規則に従う必要があります。つまり、クラス名は大文字である必要があります(class Counterではなくclass counterなど)。

+0

thanx。 @javaguy。私はjava.lang.Runnableを使用し、それは働いた。 –

+0

私は何をしていたのか分からない...あなたの努力に感謝します。ありがとう 。 –

0
import java.lang.Runnable; 
class counter implements Runnable 
{ 
    private int x; 
    public counter(){x=0;} 
    public int getval(){return x;} 
    public void run() 
    { 
     try{ 
     while(x<5){ 
      System.out.println(Thread.currentThread().getName()+ ":" + (x++)); 
      Thread.sleep(250); 
       } 
     System.out.println("Exit from thread:"+Thread.currentThread());} 
     catch(InterruptedException e){ 
     System.out.println("InterruptedException"); 
      } 
    } 
} 

public class client { 
    public static void main(String args[]) 
    { 
     counter obj=new counter(); 
     Thread td=new Thread(obj,"bac"); 
     td.start(); 
     int val; 
     try{ 
      do{ 
      val=obj.getval(); 
      System.out.println(td.getName()+ ":=" + val); 
      Thread.sleep(1000); 
      }while(val<5); 
      } 
     catch(InterruptedException e) 
     { 
       System.out.println("InterruptedException 2"); 
     }         
    System.out.println("Exit from thread:"+td.getName()); 
    } 
} 
関連する問題