

いくつか問題があります。

n回に１回描画すると経過時間が(n-1)/nになる。60フレーム中２回なら0.5秒、３回なら0.66秒という感じ。  
CPU使用率が徐々に上昇する。最初は１０％未満で、８０％程度まで確認。  
毎フレーム描画すると非表示状態でタイマーの間隔が異常に短くなる。

こちらの環境はLubuntu15.04です。

コードは以下です。

[code]

    import javafx.animation.AnimationTimer;
    import javafx.application.Application;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.canvas.Canvas;
    import javafx.scene.canvas.GraphicsContext;
    import javafx.scene.image.WritableImage;
    import javafx.stage.Stage;
    
    public class Main extends Application {
    
        int frame;
        long last;
    
        @Override
        public void start(Stage primaryStage) throws Exception {
            Group root = new Group();
            primaryStage.setScene(new Scene(root));
            Canvas canvas = new Canvas(640, 480);
            root.getChildren().add(canvas);
            GraphicsContext gc = canvas.getGraphicsContext2D();
            WritableImage image = new WritableImage(32, 32);
    
            new AnimationTimer() {
                @Override
                public void handle(long now) {
                    if (frame % 3 == 0) {
                        gc.drawImage(image, 0, 0);
                    }
                    if (frame % 60 == 0) {
                        primaryStage.setTitle("" + (now - last) / 1_000_000_000.0);
                        last = now;
                    }
                    frame++;
                }
            }.start();
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    
[/code]

java1.8.0_102でも同じ結果となりました。  
WindowsXP,7で実行したところCPU使用率の上昇は見られませんでした。  
Windows7の方にLubuntuを入れてやってみたら上昇しましたので、OS側の問題ということでしょうか。


CC BY-SA 3.0
2016-04-11T00:53:39.917
23902
2016-12-16T19:32:50.243
2016-12-16T19:32:50.243
-1
15118
question
java javafx
drawImage, AnimationTimerの挙動がおかしい


【こちらWindows10、コード実行時のCPU使用率概ね5%以内です。javaのverは1.8.0_102です。  
タイトルバーに表示される間隔は0.63～0.64です。】

非表示に間隔が短くなるのはimageの絵画がされていないだけなので、それは仕様かもしれません。  
CPU使用率が異常なのはjavaを更新すれば治るかもしれません。

【コードの修正は必要ないと判断しました。】


CC BY-SA 3.0
2016-09-04T06:58:55.697
28676
2016-09-04T07:22:08.290
2016-09-04T07:22:08.290
18660
18660
23902
answer