JAL-1432 updated copyright notices
[jalview.git] / src / jalview / gui / OOMWarning.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.0b1)
3  * Copyright (C) 2014 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 of the License, or (at your option) any later version.
10  *  
11  * Jalview is distributed in the hope that it will be useful, but 
12  * WITHOUT ANY WARRANTY; without even the implied warranty 
13  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
14  * PURPOSE.  See the GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
17  * The Jalview Authors are detailed in the 'AUTHORS' file.
18  */
19 package jalview.gui;
20
21 import java.awt.Component;
22
23 public class OOMWarning implements Runnable
24 {
25   String action = null;
26
27   String instructions = "";
28
29   public static boolean oomInprogress = false;
30
31   Component desktop = null;
32
33   /**
34    * Raise an out of memory error.
35    * 
36    * @param action
37    *          - what was going on when OutOfMemory exception occured.
38    * @param instance
39    *          - Window where the dialog will appear
40    * @param oomex
41    *          - the actual exception - to be written to stderr or debugger.
42    */
43   OOMWarning(final String action, final OutOfMemoryError oomex,
44           final Component instance)
45   {
46     if (!oomInprogress)
47     {
48       oomInprogress = true;
49       this.action = action;
50       desktop = instance;
51       if (oomex != null)
52       {
53         if (jalview.bin.Cache.log != null)
54         {
55           jalview.bin.Cache.log
56                   .error("Out of Memory when " + action, oomex);
57         }
58         else
59         {
60           System.err.println("Out of Memory when " + action);
61           oomex.printStackTrace();
62         }
63       }
64       javax.swing.SwingUtilities.invokeLater(this);
65       System.gc();
66     }
67   }
68
69   public OOMWarning(String string, OutOfMemoryError oomerror)
70   {
71     this(string, oomerror, Desktop.desktop);
72   }
73
74   public void run()
75   {
76     javax.swing.JOptionPane
77             .showInternalMessageDialog(
78                     desktop,
79                     "Out of memory when "
80                             + action
81                             + "!!"
82                             + "\nSee help files for increasing Java Virtual Machine memory.",
83                     "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 }