JavaFx应用程序滞后

时间:2016-03-23 13:56:44

标签: java javafx lag resource-leak


在我的应用程序下面,红色块从屏幕顶部落下。我的问题是,3-5分钟后动画开始滞后,我无法弄清楚原因 我使用了一个分析器并发现,它不是内存泄漏但它必须是资源泄漏,我很确定,因为Cpu负载随着时间的推移而增加。
如果你愿意,你可以只实现必要的类并编译和运行代码,那么你应该看到问题所在。 (3-5分钟后)
感谢您的帮助,祝您度过愉快的一天! :)

public class RBYDebug extends Application {

    Group root = new Group();
    ArrayList<Rectangle> entities = new ArrayList<>();

    Random random = new Random();

    int sW = 1600;  //screen Width
    int sH = 980;   //screen Height
    int dy = 4;     //vertical move speed

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

    public void start(Stage primaryStage){

        //Setup Entities
        for (int i = 0; i < 40; i++){
            double x = random.nextDouble() * sW;
            double y = i * 50;
            Rectangle rect = new Rectangle(x, -y -50, 50, 50);
            rect.setFill(Color.RED);
            entities.add(rect);
        }   
        //Root-Group setup
        root.getChildren().setAll(entities);

        //Setup Scene
        Scene scene = new Scene(root, sW, sH, Color.BLACK);

        //Stage setup
        primaryStage.setTitle("RBY Debug");
        primaryStage.setScene(scene);
        primaryStage.setResizable(false);
        primaryStage.show();

        //Setup Timer
        AnimationTimer timer = new AnimationTimer(){
            public void handle(long now){
                update();
            }
        };
        timer.start();
    }

    public void update(){

        for (Rectangle i : entities){
            if (i.getY() <= sH){
                i.setY(i.getY() + dy);
            }
            else {
                i.setY(-i.getHeight());
            }
        }
        root.getChildren().setAll(entities);
    }
}

0 个答案:

没有答案