暂停并恢复线程javafx

时间:2016-09-16 01:00:03

标签: java multithreading javafx

我正在尝试暂停javafx线程的恢复,这里是管理线程开始和暂停的服务:

    package fxmlexample;

    import java.awt.MouseInfo;
    import javafx.concurrent.Task;
    import javafx.stage.Stage;
    import javafx.concurrent.ScheduledService;`

public class myThreadService extends ScheduledService<Void>{

    private static int THREAD_LENGTH = 100;
    private boolean runFlag;

    public void start(Stage stage) throws Exception {
        setRunFlag(true);
        this.start();
    }

     @Override protected void succeeded() {
             super.succeeded();
         }


@Override protected void cancelled() {
             setRunFlag(false);
             super.cancelled();
         }


 @Override protected void failed() {
             super.failed();
         }
    public void resume() throws InterruptedException{
        try{
            this.resume();
            setRunFlag(true);
        }
        catch(InterruptedException e){
            System.out.println("error while resuming thread: "+e);
        }
    } 

    public void setRunFlag(boolean flag){
            this.runFlag = flag;
        }

        public boolean getRunFlag(){
            return runFlag;
        }

        @Override
    protected Task<Void> createTask() {
        return new Task() {
            @Override
            protected Object call() throws Exception {
                for (int i = 0; i < THREAD_LENGTH; i++) {
                    if(!getRunFlag()){
                        this.cancel();
                        break;
                    }
                    int mouseX = MouseInfo.getPointerInfo().getLocation().x;
                    int mouseY = MouseInfo.getPointerInfo().getLocation().y;
                    System.out.println("("+mouseX+","+mouseY+")"+getRunFlag());
                }
                Thread.sleep(100);
                return null;
            }
        };
    }        
}

我读了一些帖子,建议使用变量来决定是否应该停止或继续使用。我的问题是,一旦线程运行,我的getRunFlag总是返回true,即使pause()被激活。所以线程继续运行。 有没有办法获得一个特定的运行线程,然后安全地杀死它?

0 个答案:

没有答案