如果JRE版本少于预期的JRE运行

时间:2015-06-22 05:46:48

标签: java

这可能听起来很愚蠢。忍受我。我正在开发一个旨在在JRE 1.6或更高版本中运行的java应用程序。

我正在使用Netbeans,我将Project Properties中的'Java Platform'信息设置为JDK 1.6。

我遇到了一个场景,如果它在具有较低版本(1.4.2)的机器中运行,那么我收到以下错误消息。

[dinesh@dinesh-PC mypgms]$ java -jar MyApp.jar
Exception in thread "main" java.lang.ClassFormatError: myApp.Main (unrecognized class file version)
   at java.lang.VMClassLoader.defineClass(libgcj.so.7rh)
   at java.lang.ClassLoader.defineClass(libgcj.so.7rh)
   at java.security.SecureClassLoader.defineClass(libgcj.so.7rh)
   at java.net.URLClassLoader.findClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
   at gnu.java.lang.MainThread.run(libgcj.so.7rh)
[dinesh@dinesh-PC mypgms]$

我检查了以下面的方式获取java版本

static double getJavaVersion() {
        String version = System.getProperty("java.version");
        int pos = version.indexOf('.');
        pos = version.indexOf('.', pos + 1);
        return Double.parseDouble(version.substring(0, pos));
    }

我怀疑是否会调用此方法。在main()中,我正在调用此方法,这是第一个语句,我得到了上述错误。正如所料,似乎加载类本身导致较低JRE版本的问题。

 public static void main(String[] args) throws IOException {

        double javaVersion = getJavaVersion();
        System.out.println("Java Version : " + javaVersion);
        if (javaVersion < 1.6) {
            JOptionPane.showMessageDialog(null, "Please install JRE 1.6 or higher version.", "ERROR", JOptionPane.ERROR_MESSAGE, null);
            return;
        }
       // More code 

}

当应用程序从较低版本的JRE启动时,如何向用户优雅地显示错误消息?

1 个答案:

答案 0 :(得分:0)

也许不是将应用程序分发为jar,而是可以使用可以执行必要的先决条件检查的启动脚本对其进行打包。 我认为Windows批处理和* nix shell脚本将满足您的大多数需求。