no stack trace available 错误是什么原因呀?

rubber365 2003-03-25 04:17:34
我在开发一个数码冲印的网站,
我用java编写了一个函数将用户上传的JPG图片压缩为2k左右的小图片供快速浏览,这个函数一般情况下都是能正常运行的。但对于3500*3500以上像素的图片出现了以下的错误:
Java.lang.OutOfMemoryError
<<no stack trace available >>
我的函数如下:

public String SWitch()//对整个文件夹下的文件生成缩略图
{
FileViewer f=new FileViewer();
f.setPath(GetDir);
f.refreshList();

while(f.nextFile()){
BufferedImage image;

String tempstr;
String NewFileName;
tempstr=f.getFileName();
NewFileName=tempstr.substring(0,tempstr.indexOf("."))+".jpg";

File file = new File(SetDir+NewFileName);
if(file.exists())
{ //若缩略图文件已存在则不作处理!
}
else
{

FileOutputStream tempout =null;
try{
tempout= new FileOutputStream(file);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}


Image img=null;

Toolkit tk=Toolkit.getDefaultToolkit();


Applet app=new Applet();
MediaTracker mt = new MediaTracker(app);


int OutOfMemoryFlag=0;
try {
img=tk.getImage(GetDir+f.getFileName());

System.out.println("1");
mt.addImage(img, 0);
System.out.println("2");
mt.waitForID(0);
System.out.println("3");
}
catch(Exception e) {
OutOfMemoryFlag=1;
//e.printStackTrace();
}
finally
{
if(OutOfMemoryFlag==1)
{
//对于超过3500×3500的图片会产生内存溢出的错误
System.out.println("error");
AllParam ap=new AllParam();
//img=tk.getImage(ap.GL_RootPath+"imaging\\images\\failed.gif");
DebugFile.WriteFile(ap.GL_RootPath+"imaging\\images\\failed.gif");
}
}


System.out.println("Width="+img.getWidth(null)+" Height="+img.getHeight(null));

if(img.getWidth(null)==-1)
{
System.out.println(" can't read,retry!"+"<BR>");
}
else
{
double rate1=((double)img.getWidth(null))/80.0+0.1;
double rate2=((double)img.getHeight(null))/80.0+0.1;
double rate=rate1>rate2?rate1:rate2;

int new_w=(int)(((double)img.getWidth(null))/rate);
int new_h=(int)(((double)img.getHeight(null))/rate);
// BufferedImage buffImg = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);
BufferedImage buffImg = new BufferedImage(new_w,new_h,BufferedImage.TYPE_INT_RGB);

Graphics g = buffImg.createGraphics();

g.setColor(Color.white);
g.fillRect(0,0,new_w,new_h);

g.drawImage(img,0,0,new_w,new_h,null);
g.dispose();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(tempout);
try
{
encoder.encode(buffImg);
tempout.close();
}
catch(IOException ex)
{
System.out.println(ex.toString());
}
}
}
}
return "ok";
}

求各位想想办法?
...全文
1090 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wylove 2003-03-25
干么非要打印跟踪信息,捕获后可以进行不同的处理:
System.out.println(e.getMessage());
回复
rubber365 2003-03-25
那么怎么解决呢?请教?
回复
outlier 2003-03-25
错误的原因事outOfMemory.
<<no stack trace available >>
是因为你使用了Exception.printStackTrace().
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2003-03-25 04:17
社区公告
暂无公告