473,397 Members | 1,985 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,397 software developers and data experts.

OutOfMemoryError: Java Heap Space

23
I have a program that shows a thumbnail of an image. If the user clicks on the thumbnail a new JFrame is opened that shows the full size image. If the image is larger than the screen, it gets scaled to the the size of the screen.

Functionally, the program works well. However, when testing I found that after clicking the thumbnails of several images (and subsequently closing their viewing frames), I get an java.lang.OutOfMemoryError: Java heap space. I'm not really sure what to do about this. Below the code I've included a snippet of the StackTrace.

I've been searching around, and most forums talk about increasing heap size. I don't want to have to do that. It seems like if I'm properly releasing resources, I shouldn't have the problem. All I want the program to do is: show a full size image in a new window, then return those resources when the window is closed.

Thanks in advance for any help.

Here is my code:

Expand|Select|Wrap|Line Numbers
  1. //==================================================================================
  2. //will scale a provided image to the provided size
  3. //==================================================================================
  4.        public static BufferedImage scaleImage (Image image, int width, int height)
  5.       {
  6.          if (image == null)
  7.          {
  8.             return null;
  9.          }
  10.          else
  11.          {
  12.             Image temp = image.getScaledInstance (width, height, Image.SCALE_SMOOTH);
  13.  
  14.             BufferedImage scaledImage = new BufferedImage (
  15.                temp.getWidth (null), temp.getHeight (null), BufferedImage.TYPE_INT_RGB);
  16.  
  17.             Graphics2D g2d = (Graphics2D)scaledImage.getGraphics();
  18.             g2d.drawImage (temp, 0, 0, null);
  19.             g2d.dispose();
  20.  
  21.             return scaledImage;
  22.          }
  23.       }
  24. //==================================================================================
  25. //will open a full size version of an image in a new window
  26. //==================================================================================
  27.        public static void showFullSizeImage (BufferedImage temp, String fileName)
  28.       {
  29.          final BufferedImage scaledImage;
  30.          int width = temp.getWidth();
  31.          int height = temp.getHeight();
  32.          Toolkit tk = Toolkit.getDefaultToolkit();
  33.  
  34.          Dimension screenDimension = tk.getScreenSize();
  35.  
  36.          if (temp != null)
  37.          {
  38.             if (width >= height)
  39.             {
  40.                if (screenDimension.getWidth() >= width)
  41.                {
  42.                   scaledImage = Utility.scaleImage (
  43.                      temp, (int)(screenDimension.getWidth()), -1);
  44.                }
  45.                else
  46.                {
  47.                   scaledImage = temp;
  48.                }
  49.             }
  50.             else
  51.             {
  52.                if (screenDimension.getHeight() >= height)
  53.                {
  54.                   scaledImage = Utility.scaleImage (
  55.                      temp, -1, (int)(screenDimension.getHeight()));
  56.                }
  57.                else
  58.                {
  59.                   scaledImage = temp;
  60.                }
  61.             }
  62.          }
  63.          else
  64.          {
  65.             scaledImage = null;
  66.             JOptionPane pane = new JOptionPane();
  67.             pane.showMessageDialog (null, "Could not display image");
  68.          }
  69.  
  70.          if (scaledImage != null)
  71.          {
  72.             JFrame frame = new JFrame (Utility.parseFileName (fileName));
  73.             frame.addWindowListener (
  74.                    new WindowAdapter(){
  75.                       public void windowClosed (WindowEvent e){
  76.                         JFrame frame = (JFrame)e.getSource();
  77.                         frame.dispose();
  78.                      }
  79.                   });
  80.  
  81.             JPanel panel = 
  82.                 new JPanel(){
  83.                    public void paintComponent (Graphics g){
  84.                      g.drawImage (scaledImage, 0, 0, null);
  85.                      g.dispose();
  86.                   }
  87.                };
  88.             panel.setPreferredSize (
  89.                new Dimension (scaledImage.getWidth(), scaledImage.getHeight()));
  90.  
  91.             frame.add (panel);
  92.             frame.pack();
  93.             frame.setLocationRelativeTo (null);
  94.             frame.setVisible (true);
  95.          }
  96.       }
  97.  
Expand|Select|Wrap|Line Numbers
  1. at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
  2. at java.awt.image.Raster.createPackedRaster(Raster.java:458)
  3. at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
  4. at java.awt.image.BufferedImage.<init>(BufferedImage.java:312)
  5. at Utility.scaleImage(Utility.java:104)
  6. at Utility.showFullSizeImage(Utility.java:174)
  7. at DisplayPanel$2.mouseClicked(DisplayPanel.java:78)
  8.  
Jan 24 '09 #1
1 7103
JosAH
11,448 Expert 8TB
I think that final BufferedImage scaledImage reference is in your way. Create a separate class extending from a JFrame that you can construct with a BufferedImage parameter so you don't need that final reference anymore.

When you dispose the JFrame, also flush() the image.

kind regards,

Jos
Jan 25 '09 #2

Sign in to post your reply or Sign up for a free account.

Similar topics

0
by: Nagaraj | last post by:
I have a RMIServer which reads a XML file during the startup after registering with the rmi registry.When the XML file is too huge I get the java.lang.OutOfMemoryError.But after this error is...
0
by: Ravi Tallury | last post by:
Hi We are having issues with our application, certain portions of it stop responding while the rest of the application is fine. I am attaching the Java Core dump. If someone can let me know what...
2
bhing
by: bhing | last post by:
Hiya!!! Please help me on this, we have a website running under linux with JSP and Apache-tomcat ... when we try to upload and edit something it returns out of memory, and suddenly tomcat will...
0
by: subashinicse | last post by:
hi everybody, am working with J2EE &hibernate... while i run my application,am sending an object(filetype of size more than 8MB) from jboss to securityserver,where am getting ERROR as...
0
by: subashinicse | last post by:
hi everybody, am working with J2EE &hibernate... while i run my application,am sending an object(filetype of size more than 8MB) from jboss to securityserver,where am getting ERROR as...
5
blazedaces
by: blazedaces | last post by:
Ok, so you know my problem, java is running out of memory reading with SAX, the event-based xml parser intended more-so than DOM for extremely large files. I'll try to explain what I've been doing...
6
by: nickyeng | last post by:
I keep getting this error: java.lang.OutOfMemoryError: Java heap space what possible reason that cause this error ? My boss dont want increase java memory, so i had to change my code. ...
8
by: jamborta | last post by:
im trying to iterate through a large database (over 5000 entries), and printing out the entries using this code: String sql = "SELECT "+column+ " ,clickurl from " + tableName; stmt =...
8
blazedaces
by: blazedaces | last post by:
So I have a program below which writes an excel file with multiple sheets based on inputs of sheet names, data, cell types, etc. It uses Apache POI, which is currently the only thing I found...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.