41d986f705c1eea1f3380ec7054a82e9b435d518
[jalview.git] / src / jalview / gui / OOMWarning.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8)
3  * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle
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  */
18 package jalview.gui;
19
20 import java.awt.Component;
21
22 public class OOMWarning implements Runnable
23 {
24   String action = null;
25
26   String instructions = "";
27
28   public static boolean oomInprogress = false;
29
30   Component desktop = null;
31
32   /**
33    * Raise an out of memory error.
34    * 
35    * @param action
36    *          - what was going on when OutOfMemory exception occured.
37    * @param instance
38    *          - Window where the dialog will appear
39    * @param oomex
40    *          - the actual exception - to be written to stderr or debugger.
41    */
42   OOMWarning(final String action, final OutOfMemoryError oomex,
43           final Component instance)
44   {
45     if (!oomInprogress)
46     {
47       oomInprogress = true;
48       this.action = action;
49       desktop = instance;
50       if (oomex != null)
51       {
52         if (jalview.bin.Cache.log != null)
53         {
54           jalview.bin.Cache.log
55                   .error("Out of Memory when " + action, oomex);
56         }
57         else
58         {
59           System.err.println("Out of Memory when " + action);
60           oomex.printStackTrace();
61         }
62       }
63       javax.swing.SwingUtilities.invokeLater(this);
64       System.gc();
65     }
66   }
67
68   public OOMWarning(String string, OutOfMemoryError oomerror)
69   {
70     this(string, oomerror, Desktop.desktop);
71   }
72
73   public void run()
74   {
75     javax.swing.JOptionPane
76             .showInternalMessageDialog(
77                     desktop,
78                     "Out of memory when "
79                             + action
80                             + "!!"
81                             + "\nSee help files for increasing Java Virtual Machine memory.",
82                     "Out of memory",
83                     javax.swing.JOptionPane.WARNING_MESSAGE);
84     // hope that there's enough memory left that no more appear.
85     oomInprogress = false;
86   }
87
88 }