eb4425e1b59dbb848f99220bd1f42d3ac83a40e1
[jalview.git] / src / jalview / gui / OOMWarning.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.gui;
22
23 import jalview.util.MessageManager;
24
25 import java.awt.Component;
26
27 public class OOMWarning implements Runnable
28 {
29   String action = null;
30
31   String instructions = "";
32
33   public static boolean oomInprogress = false;
34
35   Component desktop = null;
36
37   /**
38    * Raise an out of memory error.
39    * 
40    * @param action
41    *          - what was going on when OutOfMemory exception occured.
42    * @param instance
43    *          - Window where the dialog will appear
44    * @param oomex
45    *          - the actual exception - to be written to stderr or debugger.
46    */
47   OOMWarning(final String action, final OutOfMemoryError oomex,
48           final Component instance)
49   {
50     if (!oomInprogress)
51     {
52       oomInprogress = true;
53       this.action = action;
54       desktop = instance;
55       if (oomex != null)
56       {
57         if (jalview.bin.Cache.log != null)
58         {
59           jalview.bin.Cache.log
60                   .error("Out of Memory when " + action, oomex);
61         }
62         else
63         {
64           System.err.println("Out of Memory when " + action);
65           oomex.printStackTrace();
66         }
67       }
68       javax.swing.SwingUtilities.invokeLater(this);
69       System.gc();
70     }
71   }
72
73   public OOMWarning(String string, OutOfMemoryError oomerror)
74   {
75     this(string, oomerror, Desktop.desktop);
76   }
77
78   public void run()
79   {
80     javax.swing.JOptionPane.showInternalMessageDialog(desktop,
81             MessageManager.formatMessage("warn.out_of_memory_when_action",
82                     new String[] { action }), MessageManager
83                     .getString("label.out_of_memory"),
84             javax.swing.JOptionPane.WARNING_MESSAGE);
85     // hope that there's enough memory left that no more appear.
86     oomInprogress = false;
87   }
88
89 }