我的程序抛出一个异常,但它运行良好
问题描述:
这里是我在做什么代码:我的程序抛出一个异常,但它运行良好
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堆空间
但仍然可以运行它,它播放声音并显示图像。是否有可能这样?为什么我得到堆空间错误?
答
你会得到这个异常,因为在每个绘图事件你正在加载图像。你应该在初始化时只做一次,然后在paint方法中重新使用这些图像。
等等......并在每个绘画事件中创建一个NEW
这个Applet本身的新实例。所以你的堆被大量的Applets填满,这是你的问题。
+0
@用户谢谢 –
堆栈跟踪在发生错误时表示它在做什么?尝试加载损坏的图像时,您可能会遇到此错误,因为它会尝试将内存分配给试图对其进行解码的大量内存。 –
'GraphicsProgram扩展Canvas .. NEW扩展了JApplet'不要将Swing与AWT组件混合,没有充分的理由。而是使用'JPanel'。 –
@彼得安德鲁会记住。谢谢。 –