所以我有一个JFrame,带有一些Buttons和一个JComponent来绘制。我加载一些Images并在JComponent中绘制1st。现在我的问题是我的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);
}
}
答案 0 :(得分:0)
你实际上并没有画任何东西,而setBounds会调用invalidate(调用repaint)
所以这个块:
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();