web-dev-qa-db-ja.com

プログラムにタイマーを追加する(javafx)

プログラムにタイマーを追加しようとしています。私はJava.util.Timerを呼び出そうとしましたが、その背後にある概念を完全に理解していないので、それは私を苛立たせます。 python=でコーディングの学期を終えたところですが、これは私にはまったく異なるレベルです。

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;

import Java.awt.event.ActionListener;
import Java.util.Date;
import Java.util.Timer;
import Java.util.TimerTask;

public class main extends Application implements EventHandler<ActionEvent>{

    Button button;
    Button button2;
    Counter counter = new Counter(0);
    Counter timecounter = new Counter(0);
    Text text_counter = new Text(counter.S_count.get());
    Text text_timecounter = new Text(timecounter.S_count.get());

    Date currdate = new Date();
    int currsec = currdate.getSeconds();


    public static void main(String[] args) {
        launch(args);


    }


    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Counter Window");

        button = new Button();
        button2 = new Button();
        button.setText("Reset");
        button.setOnAction(this);
        button2.setText("Tick");
        button2.setOnAction(this);
        button.setTranslateY(-120);
        button2.setTranslateY(-80);
        text_counter.textProperty().bind(counter.S_count);
        text_timecounter.textProperty().bind(timecounter.S_count);
        text_timecounter.setTranslateX(-100);



        StackPane layout = new StackPane();
        layout.getChildren().add(button);
        layout.getChildren().add(button2);
        layout.getChildren().add(text_counter);
        layout.getChildren().add(text_timecounter);

        Scene scene = new Scene(layout, 360,280);
        primaryStage.setScene(scene);

        primaryStage.show();
    }

    @Override
    public void handle(ActionEvent event) {
        if(event.getSource()==button){
            counter.Reset();
        }
        if(event.getSource()==button2){
            counter.Tick();
        }
    }
}

私はpythonでメインループを使用してプログラムを構築しました。現在の日付の秒が変更されたかどうかをチェックするループにチェックを追加することで、それを行う「ダーティ」な方法を考えていましたある場合は、値を1つ増やします。

class timerclass {
    Timer timer1;
    private int timecounter = 0;

    TimerTask Task1 = new TimerTask() {
        @Override
        public void run() {
            setTimecounter(getTimecounter()+1);
        }
    };

    public timerclass(){
        timer1 = new Timer();

    }

    public int getTimecounter() {
        return timecounter;
    }

    public void setTimecounter(int timecounter) {
        this.timecounter = timecounter;
    }
}

これが、新しいタイマーを作成する方法です。タスクを作成し、それをタイマーにスケジュールする必要があることを理解しましたが、どのようにすればよいのか少しわかりません...

これについてどうすればいいですか?ご不便をおかけして申し訳ありません。

5
Dennis Lukas

Timerは、タスクをスケジュールするために使用されます..では、これらのタスクはどこに記述しますか?これらのタスクをTimerTaskクラスに記述する必要があります...

混乱しましたか?分解してみましょう

_Timer timer = new Timer();
_

これで、Timerクラスのオブジェクトが作成されました。そのためには、TimerTaskのオブジェクトを作成します。

_TimerTask task = new TimerTask()
{
        public void run()
        {
            //The task you want to do       
        }

};
_

これで、runメソッド内で実行するタスクを定義する必要があるタスクが作成されました。

TimerTaskクラス自体を作成したのはなぜですか?これは、TimerTaskが3つのメソッドを持つ抽象クラスであるためです。したがって、使用するメソッドを定義する必要があります。

タスクをスケジュールしています

_timer.schedule(task,5000l);
_

5000の後の 'l'に注意してください。scheduleメソッドはとして定義されているため、長いデータ型を表すためです。

void schedule(TimerTask task,long milliseconds)

詳細については

https://docs.Oracle.com/javase/7/docs/api/Java/util/Timer.html

https://docs.Oracle.com/javase/7/docs/api/Java/util/TimerTask.html

13
Vaibhav G