2012-11-16 48 views
0

這裏是我在做什麼代碼:我的程序拋出一個異常,但它運行良好

import java.net.*; 
import java.applet.*; 
import javax.swing.*; 
import java.io.*; 
import java.awt.*; 
import javax.sound.sampled.AudioFileFormat; 
class GraphicsProgram extends Canvas 
{ 
public GraphicsProgram() 
{ setSize(200, 200); 
setBackground(Color.PINK); 
} 
public static AudioFileFormat ee; 
public static AudioClip ss; 
public class NEW extends JApplet { 
public void init() { 
    ss = Applet.newAudioClip(Get_Location("/pj1/anarkali.wav")); 
    ss.play();} 

public URL Get_Location(String filename) 
{ 
    URL url = null; 
    try{ url=this.getClass().getResource(filename); 

    } 
    catch(Exception e){} 
    return url; 
    } 
    } 
    public static void main(String[] argS) 
    { 
GraphicsProgram GP = new GraphicsProgram(); 
//create a new frame to which we will add a canvas 
Frame aFrame = new Frame(); aFrame.setSize(800, 800); 
//add the canvas 
aFrame.add(GP); 
aFrame.setVisible(true); } 
public void paint(Graphics g) 
{ 
Image img01 = Toolkit.getDefaultToolkit().getImage("e:\\m.gif"); 
g.drawImage(img01, 110, 140, this); 
Image img0 = Toolkit.getDefaultToolkit().getImage("e:\\m10.jpg"); 
g.drawImage(img0, 100, 140, this); 
Image img2 = Toolkit.getDefaultToolkit().getImage("e:\\m2.gif"); 
g.drawImage(img2, 200, 140, this); 
NEW ss=new NEW(); 
ss.init(); 
} 
    } 

我越來越: 異常在線程「AWT-EventQueue的 - 0」的java.lang。 OutOfMemoryError:Java堆空間

但仍然可以運行它,它播放聲音並顯示圖像。是否有可能這樣?爲什麼我得到堆空間錯誤?

+0

堆棧跟蹤在發生錯誤時表示它在做什麼?嘗試加載損壞的圖像時,您可能會遇到此錯誤,因爲它會嘗試將內存分配給試圖對其進行解碼的大量內存。 –

+0

'GraphicsProgram擴展Canvas .. NEW擴展了JApplet'不要將Swing與AWT組件混合,沒有充分的理由。而是使用'JPanel'。 –

+0

@彼得安德魯會記住。謝謝。 –

回答

5

你會得到這個異常,因爲在每個繪圖事件你正在加載圖像。你應該在初始化時只做一次,然後在paint方法中重新使用這些圖像。

等等......並在每個繪畫事件中創建一個NEW這個Applet本身的新實例。所以你的堆被大量的Applets填滿,這是你的問題。

+0

@用戶謝謝 –

相關問題