如何在对象中获取对象?

时间:2011-01-26 13:00:10

标签: java

我正在尝试使用线程,任何人都可以告诉我下面的代码有什么问题。我在main中获得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();
  }
}

4 个答案:

答案 0 :(得分:5)

在构造函数中,您声明一个名为t的局部变量,该变量使用与您的字段t相同的名称。只需将Thread t替换为this.t或简单t

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

BTW1,强烈建议用大写字母开始课程名称,例如ThreadTest就是一个更好的名字。

BTW2,一个体面的IDE会为你发现这个错误,并引起你的注意。

答案 1 :(得分:0)

永远不会使用字段Thread tthreadtest本身就是Runnable。

移除t,然后致电new Thead(threadtest).start();java.util.concurrent.Executors.newSingleThreadExecutor().submit(threadtest);

答案 2 :(得分:0)

如果您希望自己的runnable被执行,则必须将“this”传递给线程的构造函数。

答案 3 :(得分:0)

嘿那里!实际上,Grzegorz Oledzki几乎有正确的答案,然而,还有一件事被忽视了 - 在构造函数中,您仍然需要将this作为参数传递给Thread。因为现在,您实现了runnable,但只是将字符串name传递给Thread构造函数。这不会做任何事情。

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