Coverage Report - net.sf.jabref.JabRefMain
 
Classes in this File Line Coverage Branch Coverage Complexity
JabRefMain
N/A
N/A
6
 
 1  
 package net.sf.jabref;
 2  
 
 3  
 import java.awt.Component;
 4  
 import java.awt.Dimension;
 5  
 import java.io.PrintWriter;
 6  
 import java.io.StringWriter;
 7  
 import java.lang.reflect.InvocationTargetException;
 8  
 import java.lang.reflect.Method;
 9  
 
 10  
 import javax.swing.BorderFactory;
 11  
 import javax.swing.JEditorPane;
 12  
 import javax.swing.JOptionPane;
 13  
 import javax.swing.JScrollPane;
 14  
 
 15  
 /**
 16  
  * This is a class compiled under Java 1.4.2 that will start the real JabRef and
 17  
  * print some warnings if no Java 1.5 and higher and no JRE from Sun
 18  
  * Microsystems is found.
 19  
  * 
 20  
  * Caution: We cannot use any other class from JabRef here (for instance no
 21  
  * calls to Globals.lang() are possible), since then it could not be run using
 22  
  * Java 1.4.
 23  
  * 
 24  
  * @author oezbek
 25  
  * 
 26  
  */
 27  
 public class JabRefMain {
 28  
    
 29  
     public static String exceptionToString(Throwable t){
 30  
         StringWriter stackTraceWriter = new StringWriter();
 31  
         t.printStackTrace(new PrintWriter(stackTraceWriter));
 32  
         return stackTraceWriter.toString();
 33  
     }
 34  
     
 35  
     /**
 36  
      * @param args
 37  
      *            We will pass these arguments to JabRef later.
 38  
      */
 39  
     public static void main(String[] args) {
 40  
 
 41  
         String javaVersion = System.getProperty("java.version", null);
 42  
 
 43  
         if (javaVersion.compareTo("1.5") < 0) {
 44  
             String javaVersionWarning = "\n" + 
 45  
                 "WARNING: You are running Java version 1.4 or lower (" + javaVersion + " to be exact).\n" +
 46  
                 "         JabRef needs at least a Java Runtime Environment 1.5 or higher.\n" +
 47  
                 "         JabRef should not start properly and output an error message\n" +
 48  
                 "         (probably java.lang.UnsupportedClassVersionError ... (Unsupported major.minor version 49.0)\n" +
 49  
                 "         See http://jabref.sf.net/faq.php for more information.\n";
 50  
 
 51  
             System.out.println(javaVersionWarning);
 52  
         }
 53  
 
 54  
         String javaVendor = System.getProperty("java.vendor", null);
 55  
         if (javaVendor.indexOf("Sun Microsystems") == -1) {
 56  
             System.out.println("\n" + 
 57  
                     "WARNING: You are not running a Java version from Sun Microsystems.\n" +
 58  
                     "         Your java vendor is: " + javaVendor + "\n" +
 59  
                     "         If JabRef crashes please consider switching to a Sun Java Runtime.\n" +
 60  
                     "         See http://jabref.sf.net/faq.php for more information.\n");
 61  
         }
 62  
 
 63  
         try {
 64  
             // We need to load this class dynamically, or otherwise the Java 
 65  
             // runtime would crash while loading JabRefMain itself.
 66  
             Method method = Class.forName("net.sf.jabref.JabRef").getMethod(
 67  
                 "main", new Class[] { args.getClass() });
 68  
             method.invoke(null, new Object[] { args });
 69  
 
 70  
         } catch (InvocationTargetException e) {
 71  
             
 72  
             String errorMessage = 
 73  
                 "\nERROR while starting or running JabRef:\n\n" + 
 74  
                 exceptionToString(e.getCause()) + "\n" + 
 75  
                 "Please first check if this problem and a solution is already known. Find our...\n" +
 76  
                 "  * ...FAQ at http://jabref.sf.net/faq.php and our...\n" +
 77  
                 "  * ...user mailing-list at http://sf.net/mailarchive/forum.php?forum_name=jabref-users\n\n" + 
 78  
                 "If you do not find a solution there, please let us know about the problem by writing a bug report.\n" +
 79  
                 "You can find our bug tracker at http://sourceforge.net/tracker/?atid=600306&group_id=92314\n\n" +
 80  
                 "  * If the bug has already been reported there, please add your comments to the existing bug.\n" +
 81  
                 "  * If the bug has not been reported yet, then we need the complete error message given above\n" +
 82  
                 "    and a description of what you did before the error occured.\n\n" +
 83  
                 "We also need the following information (you can copy and paste all this):\n" +
 84  
                 "  * Java Version: " + javaVersion + "\n" + 
 85  
                 "  * Java Vendor: " + javaVendor + "\n" + 
 86  
                 "  * Operating System: " + System.getProperty("os.name") + " (" + System.getProperty("os.version") + ")\n" +
 87  
                 "  * Hardware Architecture: " + System.getProperty("os.arch") + "\n\n" +
 88  
                         "We are sorry for the trouble and thanks for reporting problems with JabRef!\n";
 89  
             
 90  
             System.out.println(errorMessage);
 91  
             
 92  
             JEditorPane pane = new JEditorPane("text/html", 
 93  
                 "<html>The following error occurred while running JabRef:<p><font color=\"red\">" +
 94  
                 exceptionToString(e.getCause()).replaceAll("\\n", "<br>") + 
 95  
                 "</font></p>" + 
 96  
                 "<p>Please first check if this problem and a solution is already known. Find our...</p>" +
 97  
                 "<ul><li>...FAQ at <b>http://jabref.sf.net/faq.php</b> and our..." +
 98  
                 "<li>...user mailing-list at <b>http://sf.net/mailarchive/forum.php?forum_name=jabref-users</b></ul>" + 
 99  
                 "If you do not find a solution there, please let us know about the problem by writing a bug report.<br>" +
 100  
                 "You can find our bug tracker at <b>http://sourceforge.net/tracker/?atid=600306&group_id=92314</b>.<br>"  +
 101  
                 "<ul><li>If the bug has already been reported there, please add your comments to the existing bug.<br>" +
 102  
                 "<li>If the bug has not been reported yet, then we need the complete error message given above<br>" +
 103  
                 "and a description of what you did before the error occured.</ul>" +
 104  
                 "We also need the following information (you can copy and paste all this):</p>" +
 105  
                 "<ul><li>Java Version: " + javaVersion +
 106  
                 "<li>Java Vendor: " + javaVendor +  
 107  
                 "<li>Operating System: " + System.getProperty("os.name") + " (" + System.getProperty("os.version") + ")" +
 108  
                 "<li>Hardware Architecture: " + System.getProperty("os.arch") + "</ul>" +
 109  
                 "We are sorry for the trouble and thanks for reporting problems with JabRef!</html>");
 110  
             pane.setEditable(false);
 111  
             pane.setOpaque(false);
 112  
             pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
 113  
             
 114  
             Component componentToDisplay;
 115  
             if (pane.getPreferredSize().getHeight() > 700){
 116  
                 JScrollPane sPane = new JScrollPane(pane, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
 117  
                 sPane.setBorder(BorderFactory.createEmptyBorder());
 118  
                 sPane.setPreferredSize(new Dimension((int)pane.getPreferredSize().getWidth() + 30, 700));
 119  
                 componentToDisplay = sPane;
 120  
             } else {
 121  
                 componentToDisplay = pane;
 122  
             }
 123  
             
 124  
             JOptionPane.showMessageDialog(null, componentToDisplay, "An error occurred while running JabRef", JOptionPane.ERROR_MESSAGE);
 125  
         } catch (SecurityException e) {
 126  
             System.out.println("ERROR: You are running JabRef in a sandboxed"
 127  
                 + " environment that does not allow it to be started.");
 128  
             e.printStackTrace();
 129  
         } catch (NoSuchMethodException e) {
 130  
             System.out
 131  
                 .println("This error should not happen."
 132  
                     + " Write an email to the JabRef developers and tell them 'NoSuchMethodException in JabRefMain'");
 133  
         } catch (ClassNotFoundException e) {
 134  
             System.out
 135  
                 .println("This error should not happen."
 136  
                     + " Write an email to the JabRef developers and tell them 'ClassNotFoundException in JabRefMain'");
 137  
         } catch (IllegalArgumentException e) {
 138  
             System.out
 139  
                 .println("This error should not happen."
 140  
                     + " Write an email to the JabRef developers and tell them 'IllegalArgumentException in JabRefMain'");
 141  
         } catch (IllegalAccessException e) {
 142  
             System.out
 143  
                 .println("This error should not happen."
 144  
                     + " Write an email to the JabRef developers and tell them 'IllegalAccessException in JabRefMain'");
 145  
         } catch (UnsupportedClassVersionError e){
 146  
             
 147  
             String errorMessage = 
 148  
                 exceptionToString(e) + "\n" +
 149  
                 "This means that your Java version (" + javaVersion + ") is not high enough to run JabRef.\n" +
 150  
                                 "Please update your Java Runtime Environment to a version 1.5 or higher.\n";
 151  
             
 152  
             System.out.println(errorMessage);
 153  
             
 154  
             JEditorPane pane = new JEditorPane("text/html", 
 155  
                 "<html>You are using Java version " + javaVersion + ", but JabRef needs version 1.5 or higher." +
 156  
                 "<p>Please update your Java Runtime Environment.</p>" +
 157  
                 "<p>For more information visit <b>http://jabref.sf.net/faq.php</b>.</p></html>");
 158  
             pane.setEditable(false);
 159  
             pane.setOpaque(false);
 160  
             pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
 161  
             
 162  
             JOptionPane.showMessageDialog(null, pane, "Insufficient Java Version Installed", JOptionPane.ERROR_MESSAGE);
 163  
         }
 164  
     }
 165  
 }