Merge branch 'JAL-3878_ws-overhaul-3' into with_ws_overhaul-3
[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.bin.Console;
24 import jalview.util.MessageManager;
25
26 import java.awt.Component;
27
28 public class OOMWarning implements Runnable
29 {
30   String action = null;
31
32   String instructions = "";
33
34   public static boolean oomInprogress = false;
35
36   Component desktop = null;
37
38   /**
39    * Raise an out of memory error.
40    * 
41    * @param action
42    *          - what was going on when OutOfMemory exception occured.
43    * @param instance
44    *          - Window where the dialog will appear
45    * @param oomex
46    *          - the actual exception - to be written to stderr or debugger.
47    */
48   OOMWarning(final String action, final OutOfMemoryError oomex,
49           final Component instance)
50   {
51     if (!oomInprogress)
52     {
53       oomInprogress = true;
54       this.action = action;
55       desktop = instance;
56       if (oomex != null)
57       {
58         Console.error("Out of Memory when " + action, oomex);
59       }
60       javax.swing.SwingUtilities.invokeLater(this);
61       System.gc();
62     }
63   }
64
65   public OOMWarning(String string, OutOfMemoryError oomerror)
66   {
67     this(string, oomerror, Desktop.getDesktopPane());
68   }
69
70   @Override
71   public void run()
72   {
73     oomInprogress = false;
74     JvOptionPane.showInternalMessageDialog(desktop, MessageManager
75             .formatMessage("warn.out_of_memory_when_action", new String[]
76             { action }), MessageManager.getString("label.out_of_memory"),
77             JvOptionPane.WARNING_MESSAGE);
78     // hope that there's enough memory left that no more appear.
79   }
80
81 }