javafxを使用して複数のカウントダウンタイマーを同時に実行しようとしています。現在使用されているマルチスレッドです。今私は、私はそれを印刷するためにコントローラのクラスにアクセスできないので、そうすることができませんが、画面上に表示するようにラベルでタイマーを印刷しようとしています。私はどのように私のスレッドクラスを使用してラベルにタイマー値を印刷することを達成するのですか?私のタイマーの値は、グリッドペインのラベルに印刷する必要がありますので、私はコントローラクラスから制約を取得し、それに応じて印刷します。JavaFXマルチスレッドおよびコントローラクラス
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();
}
}
「私はコントローラクラスにアクセスすることはできません... "。何故なの?おそらく、あなたのJavaFXアプリケーションでは、コントローラからこれらのタイマーを実際にインスタンス化するでしょう(例えば、ユーザーアクションへの応答として)。 –
タイマーを独立して同時に実行したいのですが、私の場合は1回だけ実行され、他の停止が実行されます。そのため、私は異なるタイマーのスレッドを使用しています。 fxmlのコントローラから私は上記のJavaコードを呼び出しています。私はグリッドの特定の位置に各タイマーを配置する必要があります。それを達成することはできません。 –