2011-01-26 5 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. Просто замените Thread t с this.t или просто t там:

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

BTW1, настоятельно рекомендуется начинать имена классов с заглавных букв, т.е. ThreadTest в вашем случае будет лучшее название.

BTW2, достойная IDE обнаружит эту ошибку для вас и обратит ваше внимание на это.

0

Поле Thread t не используется, threadtest само по себе является Runnable.

t Удалить и вызовите new Thead(threadtest).start(); или java.util.concurrent.Executors.newSingleThreadExecutor().submit(threadtest);

0

Вы должны пройти «это» в конструктор вашего потока, если вы хотите, чтобы ваш собственный работоспособной запускается на выполнение.

0

эй там! на самом деле, Grzegorz Oledzki в значительной степени имеет правильный ответ, однако в вашем конструкторе еще одна вещь, которая была упущена - , вам необходимо передать this в качестве параметра Thread. потому что прямо сейчас вы выполнили runnable, но просто передаете строку name конструктору Thread. это ничего не сделает.

public threadtest(String name) { 
    t = new Thread(this, name); 
} 
Смежные вопросы