2017-11-07 12 views
-1

JFrameにはいくつかのボタンとJComponentが描画されています。イメージをロードし、JComponentで1番目をペイントします。今私の問題は、私のJComponentは、最初のペイントするとすぐに、永続的に再ペイントされ、数秒後にOutOfMemoryErrorが発生するということです... g.drawImage(...)は私がコメントすると無限もうループ:JComponentは永続的に再ペイントされます

@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); 
    } 
} 
+2

へようこそそう。あなたに好意を持って[Minimal、Complete、and Verifiable example](https://stackoverflow.com/help/mcve) –

+1

を作成する人をしてください。1) 'repaint'と' revalidate 'を実行する必要があります。 invokeLaterを介してイベントディスパッチスレッド(EDT)上で実行される。 2)あなたのスレッド、特に 'ContinousDraw'はループに入り、スリープ状態にはならず、正しく再描画するEDTの能力に影響を与えることがあります。 3)ループ中の 'createImage(mis)'は、何回も実行された場合にメモリ不足の原因となります。 – tsolakp

+1

塗装方法内からコンポーネントの状態を更新しないでください – MadProgrammer

答えて

0

あなたは実際には何も塗装されていない、とsetBoundsは、コール無効化(呼び出しが再描画することを)

ので、このブロックん:

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); 

はsetVisi前に、コンストラクタに移動する必要がありますBLE

は、第二の問題は、あなたがメインスレッド上でそれを実行し、実行を呼び出すことによって、あなたのスレッドです

そして、あなたは、塗料をオーバーライドする必要がいけない(グラフィックス)(真)、代わりに呼び出します。

super.start(); 
+1

いいえ、あなたは塗料を削除する必要があります@HovercraftFullOfEels –

+0

私はそれがサイズ変更されたときにJFrameのコンポーネントを塗りつぶすようにペイントします。しかし、私はこれを書いている間、私はそれをリサイズリスナーに入れることを考えます。 – ultimate2106

+0

しかし、これはJComponentの永久的な塗り替えを変更しませんでした。/ – ultimate2106

関連する問題