2011-01-26 13 views
3

私はスレッドを使用しようとしています誰でも次のコードで何が間違っているか教えてください。私はメインにNullPointerExceptionを得ています。あなたのコンストラクタでオブジェクトをオブジェクトの内部で取得する方法は?

public class threadtest implements Runnable { 

    Thread t; 

    public threadtest(String name) { 
    Thread t = new Thread(name); 
    } 

    public void run() { 
    for(int i = 0; i <= 10; i++) { 
     try { 
     Thread.sleep(1000); 
     } 
     catch(Exception e) { 
     System.out.println(e); 
     } 
    } 
    } 

    public static void main(String args[]) { 
    threadtest ob = new threadtest("satheesh"); 
    ob.t.start(); 
    } 
} 
+0

間違ったのはコードの形式です。 – Istao

+4

最初に、この規約を使用する方が良いです:CamelCaseはThreadTest – bluish

+0

@Danielのようなクラス名には、編集前には「
」がありませんでした。 –

答えて

5

あなたのフィールドtと同じ名前を使用していますtと呼ばれるローカル変数を宣言します。単にthis.tまたはそこに簡単なtThread tを置き換える:

public threadtest(String name) { 
    this.t=new Thread(name); 
} 

BTW1、非常にあなたのケースでは、すなわちThreadTestが良い名前だろう、大文字でクラス名を開始することをお勧めします。

BTW2、まともなIDEがあなたにこの間違いを見つけ、これに注意を向けました。

0

フィールドThread tは使用されません。threadtest自体は実行可能です。

tを削除し、そしてあなた自身の実行可能が実行されることを望む場合は、あなたのスレッドのコンストラクタに「これを」渡す必要がありnew Thead(threadtest).start(); またはjava.util.concurrent.Executors.newSingleThreadExecutor().submit(threadtest);

0

ありがとうございます!実際には、Grzegorz Oledzkiは正しい答えを持っていますが、コンストラクタで が見逃されました。さらに、thisをThreadに渡す必要があります。現在はrunnableを実装していますが、文字列nameをThreadコンストラクタに渡すだけです。それは何もしません。

public threadtest(String name) { 
    t = new Thread(this, name); 
}