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();
Другие вопросы по тегам