2011-01-26 135 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 2011-01-26 13:04:38

回答

5

在构造函数声明称为t一个局部变量,它使用相同的名称字段t。只需用this.t或简单t有取代Thread 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); 
}