Как заставить Task в сервисе JavaFX постоянно принимать аргументы? - PullRequest
0 голосов
/ 20 января 2020

Я вызываю задачу в службе JavaFX, что-то делает, и проблема в том, что метод в этой службе принимает аргументы от элементов пользовательского интерфейса только один раз ...

код:

    public void DoSomething(){ //this method is invoked when button is clicked
            ExampleService s = new ExampleService();
            s.setValue1(s1.getValue()); //s1,s2 - UI elements
            s.setValue2(s2.getValue());
            s.start();
        };

        private static class ExampleService extends Service<Void> {
            double value1,value2;
            public double getValue1() {
                return value1;
            }

            public void setValue1(double value1) {
                this.value1 = value1;
            }

            public double getValue2() {
                return value2;
            }

            public void setValue2(double value2) {
                this.value2 = value2;
            }

            @Override
            protected Task<Void> createTask() {
                return new Task() {
                    final double v1 = value1;
                    final double v2 = value2;
                    @Override
                    protected Object call() throws Exception {
                        while(!isCancelled())
                            ExampleMethod(v1,v2); // I want this method to take arguments from UI elements at each iteration
                        return null;
                    }
                };
            }
        }

Как заставить метод принимать аргументы от элементов пользовательского интерфейса на каждой итерации? Я попытался создать задачу в методе DoSomething(), но это заблокировало пользовательский интерфейс (и, честно говоря, это не очень хорошая идея ...)

1 Ответ

0 голосов
/ 20 января 2020
protected Task<Void> createTask(int i, int j) {
    return new Task<Void>() {
        @Override
        protected Void call() throws Exception {
            while(!isCancelled()) {
                new InnerMethod(i, j);
            }
            return null;
        }
    };
}
...