Zdravím,
potřeboval bych poradit, jaky je rozdíl mezi Task a runLater v případě, že se snažím zavolat konstruktor dialogu.
Thread WatchThr = new Thread (new Runnable(){
@Override
public void run (){
while (true){
synchronized (UpominkyLogic.mapaUpominek){
try{
UpominkyLogic.mapaUpominek.wait();
}catch (InterruptedException AF){}
//dosud se ceka na notify z jineho vlakna
javafx.application.Platform.runLater(new Runnable (){
public void run (){
new ErrorDialog (primaryStage, true, UpominkyLogic.message); //boolean je pro zvukovy signal
}
});
}
}
}
});
WatchThr.setDaemon(true);
WatchThr.start();
Druhý kód to pak řeší elegantněji, ale ve chvíli, kdy by měl vytvořit dialog, se celý ukončí (měl by jet dokud neskončí aplikace):
Task<Void> WatchThr = new Task<Void> (){
@Override
public Void call (){
while (true){
synchronized (UpominkyLogic.mapaUpominek){
try{
UpominkyLogic.mapaUpominek.wait();
}catch (InterruptedException AG){}
new ErrorDialog (primaryStage, true, UpominkyLogic.message);
}
}
}
};
Thread UpominkaDialog = new Thread (WatchThr);
UpominkaDialog.setDaemon(true);
UpominkaDialog.start();
Myslel jsem si, že Task využívá právě metody RunLater, aby měl přístup k prostředkům UI a mohl do něj "šahat" . Proč se tedy vlákno v druhém případě ukončí aniž by vyvolalo dialog ?