JComponent постоянно перекрашивается
Итак, у меня есть JFrame с несколькими кнопками и JComponent для рисования. Я загружаю несколько изображений и рисую первый в JComponent. Теперь моя проблема в том, что мой JComponent, как только я рисую в первый раз, постоянно перерисовывается, и через несколько секунд я получаю ошибку OutOfMemoryError... Я думаю, что g.drawImage(...)
это проблема, потому что, если я закомментирую это, больше не будет бесконечного цикла:
@Override
public void paintComponent(Graphics g){
System.out.println("Test");
if(!images.isEmpty()){
Image img = activeImage.img.getScaledInstance(middleImage.getWidth(), middleImage.getHeight(), Image.SCALE_SMOOTH);
if(mode != 0){
if(mis != null){
img = createImage(mis).getScaledInstance(middleImage.getWidth(), middleImage.getHeight(), Image.SCALE_SMOOTH);
}
}
g.drawImage(img, 0, 0, this);
}
}
1 ответ
Вы на самом деле ничего не рисуете, и setBounds вызывает invalidate (который вызывает перерисовку)
Итак, этот блок:
newImage.setBounds(560, 640 + this.getHeight()-720, 720 + this.getWidth()-1280, 40);
scrollRoom.setBounds(0, 0, 437, this.getHeight());
middleImage.setBounds(560, 0, this.getWidth()-560, this.getHeight()-80);
autoFade.setBounds(436, 0, 124, 100);
createHistogram.setBounds(436, 100, 124, 100);
imageMorphology.setBounds(436, 200, 124, 100);
editImage.setBounds(436, 300, 124, 100);
endActiveMode.setBounds(436, this.getHeight() - (720-573), 124, 100);
Должен быть перемещен в конструктор до setVisible (true)
И вам не нужно переопределять краски (Графика)
Вторая проблема - это ваши потоки. Вызывая run, вы запускаете его в основном потоке, вместо этого вызывайте:
super.start();