2012-11-16 49 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

@用户谢谢 –

相关问题