Odpowiednik NETowego backgroundWorker

0

Witam. Jestem w Javie nowy więc przepraszam że męczę głupotami. Nie bardzo łapie przykłady znalezione na G.

Mam na przykład:

public class run1 implements Runnable{
    private int i=0;    
    @Override
    public void run(){
        for (; ;i++)
        {
        System.out.println("Działa "+i);
        try {
            Thread.sleep(1000);
        } catch (Exception ex) {}
        
        }
    }       
}

i wołam to w kontrolerze javaFX/FXML

public  void klik1() 
{
run1 runner=new run1();
new Thread(runner).start();
}

Chciałbym w run1 zastąpić " System.out.println" czymś takim żeby wołać zdarzenie z jakimiś argumentami w kontrolerze które mi np. zmieni tekst buttona albo odpali coś w webView.GetEngine.load()

Chciałbym prosić o jakiś ekstremalnie uproszczony przykład w powyższym kontekście.

W NETcie używałem dość nieładnego podejścia typu

 
while (true) {
application.doEvent();
system.threading.thread.sleep(20)
if ("strona się wreście załadowała"==true) break;
}

co pozwalało ominąć konieczność grzebania się w wątkach. Nie znalazłem odpowiednika w Javie.

0

Wygląda że zrobienie tego tak działa:


import javafx.application.Platform;
import javafx.scene.web.WebEngine;

public class run1 implements Runnable{
    private int i=0;    
    private WebEngine engine=null;    
 
    public run1(WebEngine engine){
        this.engine=engine;
    }
    
    @Override
    public void run(){  
        for (; ;i++) {                        
        try {Thread.sleep(5000); } catch (Exception ex) {}        
        //System.out.println("Dziala "+i);        
        Platform.runLater(new Runnable() {
          @Override public void run() {
            engine.load("http://wp.pl");                   
          }
        }); 
        
        }
    }       
}
 

i uruchomienie tego z dependency injection

exec.execute(new run1(webView1.getEngine())); 

1 użytkowników online, w tym zalogowanych: 0, gości: 1