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";
}

求各位想想办法?
...全文
3347 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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().

81,120

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧