2013-02-20 55 views
0

好吧,这里是我得到的:我正在尝试在Processing中创建一个基于线程的程序。 该程序的功能非常简单,我可以处理这个问题,但是当我尝试使它在一个线程中运行时,它会占用我的乐趣!主题:程序无法启动

长话短说,我试着做这样的事情:

class supportClass{ 
    [All the junk.]; 
}; 
class threadClass extends Thread{ 
    boolean goingThread; 
    [Some other junk.]; 
    threadClass(){ 
     goingThread = false; 
     [Junk.] 
    } 
    void start(supportClass var){ 
     goingThread = true; 
     run(var); 
     goingThread = false; 
    } 
    void run(supportClass var){ 
     [Junk which does all the work!] 
    } 
}; 

而这里的setup()方法:

void setup(){ 
    [Some junk init.]; 
    supportClass mySupportClass = new supportClass(); 
    threadClass myClass = new threadClass(); 
    myClass.start(mySupportClass); 
} 

所以,这里的问题有两个:

1 )框架甚至没有显示出来;我的意思是:该程序似乎根本不运行......;

2)由于mySupportClass上的数据发生变化,我不确定我正在使用的价值赋值方法。

在StackOverflow中搜索我没有发现任何关于解析线程值[在处理],所以...我在这里!

任何提示?

回答

3

@Override superclass run()方法添加您的线程代码。如果你想拥有你自己的带有参数的start()方法,很好,但不要调用run(),请调用start()。

+0

最后我做了最简单的事情:每一个普通类作为公众和方法就像C++ OOP的“朋友”系统一样。 – ingroxd 2013-02-28 14:54:57

1

首先,您的线程永远不会执行,因为除非您自己调用它,否则Thread类将忽略您的重载方法run(supportClass var)。实际上,Thread类需要一个没有参数执行的run方法。其次,为启动方法。在你的代码中,你提供了你自己的启动方法。你并不是重写Thread类的start方法。作为结果,你的线程永远不会进入可运行状态。 Thread类的start方法将当前线程状态从New状态(刚刚创建)更改为Runnable状态(准备通过调用run方法执行)。当线程处于Runnable状态时,它可以随时由JVM调度程序选择执行。

所以,你有两件事要做(不需要改变你的代码):首先在start(supportClass var)方法中,只需调用super.start()使其处于Runnable状态。同时也删除行run(var),因为正如我所说的那样,调用Thread而不是JVM调度程序的程序员的工作。并定义一个没有参数的run方法。

如果你想传递参数给你的线程类,这取决于你的策略。如果每个SupportClass实例需要一个线程(最简单),则可以在构造函数中传递它们。

我会建议你阅读这些链接到有关于线程的详细信息:

  1. http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
  2. http://docs.oracle.com/javase/tutorial/essential/concurrency/
+0

你必须打电话给super.start吗? start()会被继承,不是? – 2013-02-20 17:23:35

+1

是的,您必须执行super.start,因为正如我所说的,Thread类的启动方法将线程的状态更改为Runnable。可运行意味着它可以随时由JVM调度程序选择执行。如果IngrossoD提供他自己的启动方法,他必须调用super.start以使其处于该状态,否则它将不会被JVM调度程序选择。 – Dimitri 2013-02-20 17:31:55

+0

好吧,但我不明白的东西:你说我必须添加'super.start()',那么我必须定义一个'run()'方法,不带参数。 但是,如果我想给它一些参数? 我只能用'super(supportClass)'方法调用它,对吧? – ingroxd 2013-02-21 20:52:07