2012-04-29 17 views
0

スレッドを作成するときにJavaでエラーが発生する。エラーは "MainApp"にあり、RandomCharacterThreadはエラーです。スレッドt1はcharを期待していますが、int値を与えています。これが原因でエラーが発生しました。コミュニティのコードをより明確にするためのコメントを追加しました。スレッドを作成するときにJavaでエラーが発生する

//Main class. 
//program to display random numbers and characters using threads. 
public class MainApp 
{ 

    public static void main(String[] args) 
    { 
     new MainApp().start(); 
    } 
    public void start() 
    { 
     Thread t1 = new Thread (new RandomCharacterThread("1")); 
     t1.start(); 

    } 

} 


//RandomCharacterThread. 
//Imports. 
import java.util.Random; 
//===================================================================== 
public class RandomCharacterThread implements Runnable 
{ 
//Variables. 
    char letter; 
    int repeats; 
    Random rand = new Random(); 
//Constructor 
//===================================================================== 
public void RandomCharacterThread(char x) 
{ 
    letter = x; 
    repeats = rand.nextInt(999); 
} 
public void run() 
{ 
    try 
    { 
     for(int i = 0;i < repeats; i++) 
     { 
      System.out.println("Character: " + letter); 
     } 

    } 
    catch(Exception e) 
    { 

    } 
} 

} 
+2

通常、例外を破棄するのは悪い考えです。 –

+0

ありがとう、念頭に置いておいてください。 – Pendo826

+0

この場合、try/catchブロックは必要ありません。それを削除し、RuntimeExceptionまたはErrorがスローされた場合は、それが印刷されます。 –

答えて

3

あなたの「コンストラクタは、」引数としてcharかかります。 Stringを渡しています。あなたは、これはchar定数ではなくString 1と文字になり、単一引用符ではなく二重引用符、注意

Thread t1 = new Thread (new RandomCharacterThread('1')); 

のような何かをしたいと思います。

"コンストラクタ"は実際には持っていないので、引用符で囲みます。つまり、クラスと同じ名前のvoidを返すメソッドがあります。 "無効"を削除すると、あなたはうまくいくでしょう。

public RandomCharacterThread(char x) 
{ 
    ... 

これは非常に一般的な初心者のミスですが、ほとんどの人は一度だけそれを作る:コンストラクタはまったく戻り値の型を持っていません!

+0

まだエラーがあります。エラーは、パラメータに何もない場合にのみ消滅します。また、スレッドから何も印刷されません。 – Pendo826

+0

@ ConorPendlebury:ああ!私は他の問題を見る:私の編集された答えを見てください。 –

+0

その仕事に感謝します。私はいくつかの最近の仕事を見ていて、私はpublic class subClass(String x)を持っています。この場合、なぜ私はクラスを使用できませんでしたか? – Pendo826

0

クラスRandomCharacterThreadのコンストラクタは、char型の引数を受け取ります。ここでは、エラーをスローする文字列を渡します。
これは正しいバージョンです。

Thread t1 = new Thread (new RandomCharacterThread('1'));