IDEA-139164 (check tools.jar class w/o init; catch linkage errors)
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Wed, 15 Apr 2015 09:40:16 +0000 (11:40 +0200)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Wed, 15 Apr 2015 09:40:16 +0000 (11:40 +0200)
platform/platform-impl/src/com/intellij/idea/StartupUtil.java

index e4805a1efff86bf35afa69607eb80336aefabef3..6e0348d8e0d326f2bf30ba190b9114e5b33f2ea6 100644 (file)
@@ -124,7 +124,7 @@ public class StartupUtil {
     if (!"true".equals(System.getProperty("idea.no.jre.check"))) {
       try {
         // try to find a class from tools.jar
-        Class.forName("com.sun.jdi.Field");
+        Class.forName("com.sun.jdi.Field", false, StartupUtil.class.getClassLoader());
       }
       catch (ClassNotFoundException e) {
         String message = "'tools.jar' seems to be not in " + ApplicationNamesInfo.getInstance().getProductName() + " classpath.\n" +
@@ -132,6 +132,12 @@ public class StartupUtil {
         Main.showMessage("JDK Required", message, true);
         return false;
       }
+      catch (LinkageError e) {
+        String message = "Cannot load a class from 'tools.jar': " + e.getMessage() + "\n" +
+                         "Please ensure JAVA_HOME points to JDK rather than JRE.";
+        Main.showMessage("JDK Required", message, true);
+        return false;
+      }
 
       if (StringUtil.containsIgnoreCase(System.getProperty("java.vm.name", ""), "OpenJDK") && !SystemInfo.isJavaVersionAtLeast("1.7")) {
         String message = "OpenJDK 6 is not supported. Please use Oracle Java or newer OpenJDK.";