重新粉刷JPanel吃了cpu

时间:2016-10-26 23:13:50

标签: java jpanel cpu-usage

我正在尝试用java制作游戏并遇到问题。当我的程序重新绘制我的JFrame时,它会从我的CPU中获取大量功率,我想知道是否存在一些我忽视的明显错误或者是一种降低CPU使用率的方法。

Frame.java

public class Frame extends JFrame {
    JFrame frame;
    public static Panel panel;

    public void makeFrame() {
        frame = new JFrame("Game");
        panel = new Panel();
        panel.init();

        frame.setSize(1000, 1000);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setVisible(true);
        frame.add(panel);
     }
}

GameLoop.java

public class GameLoop {
//render gets called 30 times per second
    private void render() {
        Frame.panel.repaint();
    }
}

Panel.java

public class Panel extends JPanel {
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        mvmt.drawCha(g2d);   //mvmt is an instance of Movement
    }
}

Movement.java

public class Movement {
    public void drawCha(Graphics2D g2d) {
        g2d.drawImage(charImg, x , y, x + 40 , y + 40, 0, 0, 17, 28, null);
    }
}

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

你说你已经将循环限制在每秒30个刻度,而不是我认为你的重新绘制是原因。没有重新绘制时,你还有很多cpu使用吗?

如果是这样的话,我认为你的cpu在你的循环之间没有做任何事情时会转到你的循环,从而耗尽你的cpu。这就是我假设你正在使用一个线程并且没有对线程的空闲时间做任何事情。