2010-06-24 106 views
0

我在写一个小程序,其中JavaFx充当查看器和控制器,并让Java执行其他艰苦的工作。我可以从Javafx启动多个线程,但是我无法阻止它们。如果我尝试使用.stop(),线程仍在运行。JavaFX多线程

这里就是其中之一:

public var sleepTask_connect; 

function LogOutAction(): Void { 
    sleepTask_connect.stop(); 
} 

function LogInAction(): Void { 

    var listener = FXListener_interface_connection { 
       override function callback(errorCode, errorMessage): Void { 
        //do something 
        if(errorCode != 200){ 
         setIcn(errorMessage); 
         } 
       } 
      } 
    sleepTask_connect = FXListener_connection { 
       listener: listener 
      }; 
    sleepTask_connect.start(); 

} 

回答

1

使用JavaTaskBase来实现你的Java线程。有一种停止方法来杀死线程。这是你如何使用它的example

+0

我已经这样做了。正如我所说,我可以开始线程,他们工作正常。但是调用.stop()不会执行任何操作。 – 2010-07-03 22:14:05

1

我对JFXtras XWorker组件的线程有更好的运气。见http://jfxtras.googlecode.com/svn/site/javadoc/release-0.6/org.jfxtras.async/org.jfxtras.async.XWorker.html

但是,一般来说,为了让线程响应取消/停止请求,您必须在“执行某些操作”部分检查代码中已取消或已停止的标志。例如,如果你的线程处于无限循环状态,或者你只是有一系列长时间运行的进程,你可以检查它们之间的取消/停止,这会起作用。或者,如果您的代码调用某个阻塞方法(如套接字或阻塞队列),那么当线程被取消时,其中大多数将引发InterruptedException。