2016-08-25 4 views
2

В приложении, отличном от JavaFX, я хотел бы иметь тот же класс, что и Task.Non Javafx эквивалент для задачи

A Thread, который выполняет что-то и способен вернуть его прогресс.

Есть ли что-то, что могло бы выполнить задачу, подобную вышеупомянутой?

+0

посмотреть на [FutureTask] (https: // Docs. oracle.com/javase/7/docs/api/java/util/concurrent/FutureTask.html#get()) и [Исполнитель] (https://docs.oracle.com/javase/7/docs/api/java /util/concurrent/Executor.html) – jhamon

+0

FutureTask не поддерживает обновление прогресса – Hesk

+0

Можете ли вы прояснить «приложение, отличное от JavaFX»? – jhamon

ответ

2

Task класс добавляет кучу функциональности к FutureTask, но все неочевидные части должны делать с обеспечением наблюдаемых свойств и обеспечение их обновления на FX Application Thread. Похоже, вам не нужны какие-либо из трудных частей: вы запрашиваете задачу, чтобы проверить ее прогресс (так что вам не нужна наблюдаемость, то есть обратные вызовы, которые будут вызваны при изменении хода), и у вас нет FX Тема приложения, на которой планируются обновления.

Так, например, если вы хотите отслеживать прогресс, просто добавьте соответствующее свойство в свою реализацию Callable. Если вы хотите, чтобы прогресс был доступен из нескольких потоков, использовать атомную ссылку, чтобы представить прогресс внутри (или по крайней мере сделать его volatile):

import java.util.concurrent.Callable ; 
import java.util.concurrent.atomic.AtomicLong ; 

public class MyCountingTask implements Callable<Void> { 

    private AtomicLong progressCount = new AtomicLong(); 
    private final long max = 1000 ; 

    @Override 
    public Void call() throws InterruptedException { 

     for (int count = 0; count < max ; count++) { 

      progressCount.set(count); 

      // in real life, do actual work instead of sleeping... 
      Thread.sleep(100); 
     } 

     progressCount.set(max); 

     return null ; 
    } 

    public double getProgress() { 
     return 1.0*progressCount.get()/max ; 
    } 
} 
Смежные вопросы