У меня есть приложение Java, в котором есть несколько JPanels, каждый из которых выполняет много рисунков, и я получаю alot проблем с производительностью. Я использую метод ниже, пытаясь не пострадать так много, чтобы просто нарисовать содержимое JPanels в BufferedImage только тогда, когда что-то на панели изменилось, а не делало это, когда главное окно вызывает перерисовку. Когда в каждой панели меняется несколько вещей, приложение замедляется, и анимация становится очень нервной.Painting BufferedImage Performance
Я проверяю CPU и его только на 5%, но обновления появляются очень нервно, когда происходит несколько обновлений. Есть ли что-то, что может повлиять на это, я ожидал бы только нервных проблем, когда процессор становится напряженным.
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);
}
}
Вы используете двойную буферизацию? - это может помочь – Toumash
Это не выглядит кошерным для меня, когда вы не вызываете метод paintComponent супер и с вашей синхронизацией. Лучше, если вы создали и разместили [минимальную примерную программу] (http://sscce.org). –
Как часто вы рисуете 'JPanel'? Вы используете фиксированный интервал? – GiantTree