Eclipse下内存溢出错误(OutOfMemoryError)
来源:互联网 发布:软件c free5.0 编辑:程序博客网 时间:2024/05/22 07:03
文章出处:http://www.cnblogs.com/skyblue/p/3371729.html
写了一个图片缩放程序,当图片尺寸过大时会报错:
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,然后运行就可以了。
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();}}
0 0
- Eclipse下内存溢出错误(OutOfMemoryError)
- Eclipse下内存溢出错误(OutOfMemoryError)
- Eclipse下内存溢出错误(OutOfMemoryError)
- Mac下解决Eclipse内存溢出(OutOfMemoryError)的问题
- eclipse内存溢出错误
- eclipse内存溢出错误
- eclipse内存溢出:OutOfMemoryError:Java heap space
- Java内存溢出错误:OutOfMemoryError异常分析
- Java内存溢出错误(OutOfMemoryError)总结
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- eclipse启动或者运行过程中tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- android内存溢出OutOfMemoryError
- 后台运行bat定时器程序示例分享
- String、StringBuffer与StringBuilder之间区别
- uva 11151 Longest Palindrome (最长公共子序列)
- denoising auto-encoders (SdA)
- Java内部类的使用方法
- Eclipse下内存溢出错误(OutOfMemoryError)
- cookie中文乱码问题
- Eclipse下删除Tomcat6、7无法再重新new一个
- mongodb基本命令
- htmlparser 乱码总结2
- json数据格式
- Qemu-softmmu
- sparkSQL1.1入门之八:sparkSQL之综合应用
- MCC(移动国家码)和 MNC(移动网络码)