我有一个Java应用程序,它有一些JPanels,每个都执行大量的绘画,而且我的很多的性能问题。我使用以下技术试图不会遭受太多痛苦,只是当Panel上的某些东西发生了变化而不是在主窗口调用重绘时进行的操作时,只将JPanels内容绘制到BufferedImage。当每个面板中的一些内容发生变化时,应用程序变慢,动画变得非常紧张。
我只检查了CPU和它的5%,但是当有一些更新时,更新显得非常紧张。是否有可能影响这一点的东西,我只会在CPU受到压力时才会出现紧张的问题。
public class myClass extends JPanel {
private BufferedImage bImage;
private void updateImage() {
BufferedImage temp= new BufferedImage(this.getWidth(), this.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics g = temp.getGraphics();
Graphics2D g2 = (Graphics2D) g;
//Do lots and lots of drawing on g with other bufferedImages and lines and text etc
synchronized (bImage) {
bImage = temp;
}
}
public void paintComponent(Graphics g) {
synchronized (bImage) {
g.drawImage(bImage, 0, 0, this);
}
}
答案 0 :(得分:0)
告诉这里的问题并不容易,但如果你关注帧率,那么我建议你阅读Andrew Davison的一部作品,特别是第二章和第三章。章节草案可在此处获取:http://fivedots.coe.psu.ac.th/~ad/jg/
虽然Swing是专为轻量级而设计的,但如果你用它做了不寻常的动画,还有其他注意事项。您需要将绘图计时到帧速率,定期生成,甚至可能在FPS之外运行UPS计时器。它仍然很有可能,你正朝着正确的方向前进。
很抱歉,我无法提供更多帮助。祝你好运。