JavaFX中的自定义可运行节点

JavaFX中的自定义可运行节点,java,multithreading,javafx-2,javafx,Java,Multithreading,Javafx 2,Javafx,我有一个想法,创建执行任务的小部件,并可以添加到视图中,但我担心我可能从完全错误的角度处理问题。这是我的抽象类 public abstract class AbstractWidget extends AnchorPane { private Thread thread; protected Task<?> task; public AbstractWidget() { } public void start() {

我有一个想法,创建执行任务的小部件,并可以添加到视图中,但我担心我可能从完全错误的角度处理问题。这是我的抽象类

public abstract class AbstractWidget extends AnchorPane
{
    private Thread thread;
    protected Task<?> task;

    public AbstractWidget()
    {
    }

    public void start()
    {
        this.thread = new Thread(this.task);
        this.thread.start();
    }

    public void stop()
    {
        this.task.cancel();
    }
}

一切都很好,但这是正确的方式吗?我使用任务而不是服务,因为程序的运行操作可以停止并重新启动,但从不暂停和恢复。

我决定只使用服务。处理可以多次运行的函数要容易得多

public abstract class AbstractWidget extends Whatever
{
    protected Service<?> service;

    public AbstractWidget()
    {
    }

    public void start()
    {
        service.start();
    }

    public void stop()
    {
        service.cancel();
        service.reset();
    }
}
公共抽象类AbstractWidget扩展了
{
受保护服务;
公共抽象控件()
{
}
公开作废开始()
{
service.start();
}
公共停车场()
{
service.cancel();
service.reset();
}
}
然后您可以创建一个类,如:

public class MyWidget() extends AbstractWidget
{

    public MyWidget()
    {
        this.service. = new MyService();
    }

    private class MyService extends Service<Void>
    {
        protected Task<Void> createTask()
        {
            @Override
            return new Task<Void>()
            {
                // whatever
            }
        }
    }
}
公共类MyWidget()扩展了AbstractWidget
{
公共MyWidget()
{
this.service.=new MyService();
}
私有类MyService扩展服务
{
受保护的任务createTask()
{
@凌驾
返回新任务()
{
//随便
}
}
}
}
public abstract class AbstractWidget extends Whatever
{
    protected Service<?> service;

    public AbstractWidget()
    {
    }

    public void start()
    {
        service.start();
    }

    public void stop()
    {
        service.cancel();
        service.reset();
    }
}
public class MyWidget() extends AbstractWidget
{

    public MyWidget()
    {
        this.service. = new MyService();
    }

    private class MyService extends Service<Void>
    {
        protected Task<Void> createTask()
        {
            @Override
            return new Task<Void>()
            {
                // whatever
            }
        }
    }
}