Если кому-то понадобится ядро dotnet, dotnet cli разработал реализацию на основе taskill, как упоминалось выше, и рекурсивный pgrep / kill для систем на основе unix. Полная реализация может быть найдена на github . К сожалению, класс является внутренним, поэтому вам придется скопировать его в свою базу кода.
Список дочерних процессов (необходимо выполнить рекурсивно):
$"pgrep -P {parentId}"
Убить по процессу :
$"kill -TERM {processId}"
Вы можете использовать временную шкалу для какого-либо вопроса:
Timeline fiveSecondsWonder = new Timeline(new KeyFrame(Duration.seconds(5), new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("this is called every 5 seconds on UI thread");
}
}));
fiveSecondsWonder.setCycleCount(Timeline.INDEFINITE);
fiveSecondsWonder.play();
для фоновых процессов (которые ничего не делают для UI) вы можете использовать старый добрый java.util.Timer
:
new Timer().schedule(
new TimerTask() {
@Override
public void run() {
System.out.println("ping");
}
}, 0, 5000);
Я бы предпочел PauseTransition:
PauseTransition wait = new PauseTransition(Duration.seconds(5));
wait.setOnFinished((e) -> {
/*YOUR METHOD*/
wait.playFromStart();
});
wait.play();
Вот решение, использующее Java 8 и ReactFX . Предположим, что вы хотите периодически пересчитывать значение Label.textProperty()
.
Label label = ...;
EventStreams.ticks(Duration.ofSeconds(5)) // emits periodic ticks
.supplyCompletionStage(() -> getStatusAsync()) // starts a background task on each tick
.await() // emits task results, when ready
.subscribe(label::setText); // performs label.setText() for each result
CompletionStage<String> getStatusAsync() {
return CompletableFuture.supplyAsync(() -> getStatusFromNetwork());
}
String getStatusFromNetwork() {
// ...
}
По сравнению с решением Сергея вы не посвящаете весь поток получать статус из сети, а вместо этого используете общий поток пул для этого.
java.util.Timer
. Я обновил ответ на примере. – Sergey Grinev 1 April 2012 в 18:58javafx.animation.AnimationTimer
– Sergey Grinev 26 June 2013 в 18:02