ich versuche, mehrere Countdown-Timer gleichzeitig mit javafx auszuführen. derzeit verwendetes Multithreading. Jetzt versuche ich, die Timer in Etiketten zu drucken, um auf dem Bildschirm angezeigt zu werden, jedoch nicht in der Lage, dies zu tun, weil ich nicht auf die Controller-Klasse zugreifen kann, um sie zu drucken. Wie erreiche ich das Drucken des Timer-Wertes auf Etiketten mit meiner Thread-Klasse. Mein Timer-Wert sollte in Etiketten in einer Gridpanel gedruckt werden, so dass ich die Einschränkungen von der Controller-Klasse erhalten und dann entsprechend drucken.JavaFX Multithreading und Controller-Klasse
package tabapplication;
import java.util.Timer;
import java.util.TimerTask;
import tabapplication.TabApplication;
import tabapplication.FXMLDocumentController;
class Rdt implements Runnable {
private Thread t;
private String threadName;
Rdt(String name){
threadName = name;
System.out.println("Creating " + threadName);
}
public void run() {
System.out.println("Running " + threadName);
try {
final Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
int s = 60;
int m=30;
public void run() {
s--;
if(s<0 && m>0)
{m--;
s=59;
}
if(s<10)
{ System.out.println(Integer.toString(m)+":"+0+Integer.toString(s)); }
else
{System.out.println(Integer.toString(m)+":"+Integer.toString(s));}
if(m==0 && s==0)
timer.cancel();
}
}, 0, 10);
Thread.sleep(50);
} catch (InterruptedException e) {
System.out.println("Thread " + threadName + " interrupted.");
}
System.out.println("Thread " + threadName + " exiting.");
}
public void start()
{
System.out.println("Starting " + threadName);
if (t == null)
{
t = new Thread (this, threadName);
t.start();
}
}
public static void main(String args[]) {
Rdt R1 = new Rdt("Thread-1");
Thread obj1=new Thread(R1);
obj1.start();
Rdt R2 = new Rdt("Thread-2");
Thread obj2=new Thread(R2);
obj2.start();
}
}
„Ich kann die Controller-Klasse zugreifen ... ". Warum nicht? Vermutlich würden Sie in Ihrer JavaFX-Anwendung diese Timer * von * dem Controller instantiieren (z. B. als Reaktion auf eine Benutzeraktion). –
Ich möchte, dass die Timer unabhängig und gleichzeitig laufen, aber in meinem Fall ist nur ein Mal läuft und andere stoppt. Deshalb verwende ich Thread für verschiedene Timer. Vom fxml-Controller aus rufe ich den oben erwähnten Java-Code auf. aber ich muss jeden Timer an einer bestimmten Position in einem Raster platzieren. Nicht in der Lage das zu erreichen. –