Eclipse下内存溢出错误(OutOfMemoryError)
写了一个图片缩放程序,当图片尺寸过大时会报错:
Exception in thread "Image Fetcher 0" java.lang.OutOfMemoryError: Java heap space
解决方法:
在Eclipse里选:Window->Preference->Installed JREs->Edit(选中jre),
在Default VM Arguments里输入-Xms256m -Xmx1024m,表示最小内存256M,最大1G,然后运行就可以了。
程序源码ImageBrowser.java :
import java.awt.Container;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File; import javax.imageio.ImageIO;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane; public class ImageBrowser extends JFrame {
private static final long serialVersionUID = 1L; JLabel lab = new JLabel();
JFileChooser chooser = new JFileChooser();
private String filePath;
private int height;
private int width;
private final double ratio = 0.2;
public ImageBrowser() {
initial();
setTitle("Image Browser --- No image");
setSize(600, 400);
setLocation(200, 150);
setVisible(true);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); }
public void initial() {
// Create Menu
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar); JMenu menu1 = new JMenu("File");
JMenu menu2 = new JMenu("Edit");
menuBar.add(menu1);
menuBar.add(menu2);
JMenuItem openItem = new JMenuItem("Open");
menu1.add(openItem);
openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int r = chooser.showOpenDialog(null);
if(r == JFileChooser.APPROVE_OPTION)
{
filePath = chooser.getSelectedFile().getPath();
setTitle("Image Browser --- " + filePath);
spread();
}
}
});
JMenuItem spreadItem = new JMenuItem("Spread");
menu2.add(spreadItem);
spreadItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
spread();
}
}); JMenuItem resumeItem = new JMenuItem("Resume");
menu2.add(resumeItem);
resumeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
resume();
}
}); JMenuItem largeItem = new JMenuItem("Large");
menu2.add(largeItem);
largeItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
height = (int)(height*(1+ratio));
width = (int) (width*(1+ratio));
lab.setIcon(getFixedBoundIcon());
}
}); JMenuItem reduceItem = new JMenuItem("Reduce");
menu2.add(reduceItem);
reduceItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
height = (int)(height*(1-ratio));
width = (int) (width*(1-ratio));
lab.setIcon(getFixedBoundIcon());
}
}); JMenuItem exitItem = new JMenuItem("Exit");
menu1.add(exitItem);
exitItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
System.exit(0);
}
}); Container contentPane = getContentPane();
JScrollPane sc = new JScrollPane(lab);
contentPane.add(sc);
}
public void spread() {
File file = new File(filePath);
Icon ic = new ImageIcon(file.getAbsoluteFile().toString());
int icHeight = ic.getIconHeight();
int icWidth = ic.getIconWidth();
Container contentPane = getContentPane();
height = contentPane.getHeight();
width = contentPane.getWidth();
if((double)height/width>=(double)icHeight/icWidth)
height = (int)(width*(double)icHeight/icWidth);
else
width = (int)(height*(double)icWidth/icHeight);
lab.setIcon(getFixedBoundIcon());
}
public void resume() {
try {
Icon ic = new ImageIcon(filePath);
height = ic.getIconHeight();
width = ic.getIconWidth();
lab.setIcon(ic);
}
catch(Exception e) {
e.printStackTrace();
}
} public Icon getFixedBoundIcon(){
double Ratio=0.0; //缩放比例
try {
File F = new File(filePath);
Icon ret = new ImageIcon(filePath);
BufferedImage Bi = ImageIO.read(F);
if(1==1) { // ((Bi.getHeight()>height) || (Bi.getWidth()>width)) {
if (Bi.getHeight()>Bi.getWidth()){
Ratio = (new Integer(height)).doubleValue() /Bi.getHeight();
} else {
Ratio = (new Integer(width)).doubleValue()/Bi.getWidth();
}
File ThF = new File(filePath+"_"+height +"_"+width);
Image Itemp = Bi.getScaledInstance (width,height,Image.SCALE_SMOOTH);
AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(Ratio, Ratio), null);
Itemp = op.filter(Bi, null);
ImageIO.write((BufferedImage)Itemp, "jpg", ThF);
ret = new ImageIcon(ThF.getPath());
}
return ret;
}
catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public static void main(String[] args) {
new ImageBrowser();
}
}
Eclipse下内存溢出错误(OutOfMemoryError)的更多相关文章
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
发布工程后,启动tomcat出现如下内存溢出错误: java.lang.OutOfMemoryError: PermGen space ... java.lang.OutOfMemoryError: ...
- 一次apk打开时报内存溢出错误,故写下内存溢出的各种原因和解决方法
原转载:https://blog.csdn.net/cp_panda_5/article/details/79613870 正文内容: 对于JVM的内存写过的文章已经有点多了,而且有点烂了,不过说那么 ...
- java中三种常见内存溢出错误的处理方法
更多 10 相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的 ...
- java中三种常见内存溢出错误的处理方法(good)
相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决j ...
- Xamarin Android提示内存溢出错误
Xamarin Android提示内存溢出错误 错误信息:java.lang.OutOfMemoryError, Consider increasing the value of $(JavaMaxi ...
- eclipse 出现内存溢出问题解决办法
1.eclipse.ini添加设置: -vm#eclipse启动使用的jdk设置,路径根据自己实际路径修改 C:/Program Files/Java/jdk1.6.0_45/bin/javaw.ex ...
- Eclipse中运行Tomcat遇到的内存溢出错误
使用Eclipse(版本Indigo 3.7)调试Java项目的时候,遇到了下面的错误: Exception in thread "main" Java.lang.OutOfMem ...
- Java抛出OutOfMemoryError:Java heap space堆内存溢出错误的分析方案
抛出堆内存溢出的错误一定要记得保留现场环境(导出堆内存信息到文件),否则如果无法进行分析,并从根本上解决问题,下次很有可能还会出现. 第一步:导出堆转储文件 我们可以使用Jdk自带的jmap工具.使用 ...
- eclipse启动Tomcat加载项目时报内存溢出错误解决办法
在eclipse中点击Window->Preferences打开全局属性设置对话框,如下图所示设置Tomcat运行时的JVM参数,添加这段JVM设置:-Xms256M -Xmx768M -XX: ...
随机推荐
- SharePoint自动化部署,利用PowerShell 导出/导入AD中的用户
这几个月一直在帮客户改需求,部署.我已经心力憔悴,经过一段时间的摸索,我对用PowerShell实现自动化部署也有了一些心得,比如说利用PowerShell导出导入AD中的User.在基于ShareP ...
- Nginx启动/重启脚本详解
Nginx手动启动 停止操作 停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的步骤1:查询nginx主进程号ps -ef | grep nginx在进程列表里 面找m ...
- Android Support Library 23.2介绍(翻译自官方文档)
Android Support Library 23.2 (译者注:本文标注了部分文字链接,但须要***,要查看全部链接.请查看sukey=014c68f407f2d3e181b6b5e665f26a ...
- java和js实现电话号码部分隐藏
有时候我们不需要将电话号码全部展现在页面上,那么我们可能要对电话号码进行相应的处理,js代码如下: alert("13456789012".replace(/(\d{3})(\d{ ...
- php分享二十一:mysql语句
一.Join语法概述 JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接) RIGHT JOIN(右连接 ...
- Axure chrome 扩展显示已损坏的解决方法
下载地址 链接:https://pan.baidu.com/s/11K3t_mvgJg51siO_jNRejg 提取码:goz1 如果链接失效,请留言或站内信提醒我更新 疑问 之前用的好好的Axure ...
- RecyclerView中实现headerView,footerView功能
之前用com.bartoszlipinski.recyclerviewheader.RecyclerViewHeader 不过局限性有点大. (com.bartoszlipinski.recycler ...
- 帝国cms使用自定义函数获取新闻文章数 实例分享
原文地址:http://www.jbxue.com/cms/24337.html 介绍了帝国cms系统中通过用户自定义函数获取用户发表新闻数量的方法,主要是分享下帝国cms自定义函数功能. 在帝国cm ...
- 【Unity】3.2 利用预设(Prefab)制作可复用的组件
分类:Unity.C#.VS2015 创建日期:2016-04-02 一.简介 预制体(Prefab,也叫预设)是"存储在工程视图(Project View)中"的一种特殊的资源, ...
- schema中字段类型的定义
当schema中字段类型为String时,保存的时候如果该字段为Number也可以保存成功,mongoose会自动将其转换为数字字符串. 当schema中字段类型为Number时,保存的时候如果该字段 ...