运行openjdk时java.lang.NoSuchMethodError:java.lang.Double

时间:2016-01-03 09:17:13

标签: java eclipse double openjdk nosuchmethoderror

我在java中编写了一个命令行应用程序。它在eclipse中完美运行,导出到jar工作在Windows上的最新java,但在ubuntu服务器12.04 openjdk-7-jre-headless上的某些时候崩溃。

java version "1.7.0_91"
OpenJDK Runtime Environment (IcedTea 2.6.3) (7u91-2.6.3-0ubuntu0.12.04.1)
OpenJDK Client VM (build 24.91-b01, mixed mode, sharing)

Double.min函数似乎存在一些问题:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.NoSuchMethodError: java.lang.Double.min(DD)D
    at Test.main(Test.java:149)
    ... 5 more

这是有问题的代码:

String balance = "25000.00"
double MAX = 20000;
String amount = Double.toString(Double.min(MAX, Double.parseDouble(balance)));

我尝试将其编译为不同版本的java 1.5,1.6,1.7,1.8并且错误保持不变。

String amount = Double.toString(Math.min(MAX, Double.parseDouble(balance)));

根据所有出色的答案,在Java 8之前,Double.min不可用。但是,Math.min函数在java 6中完全相同。

2 个答案:

答案 0 :(得分:2)

Double#min(double, double)是在Java 8中引入的,您使用它编译了代码。当您使用较旧的JDK尝试运行时,无法找到此方法(因为它尚未引入),并且您收到了您提到的错误。

您应确保使用Java 8的JDK或更改代码以不依赖此方法。例如,通过创建自己的min方法:

public static double min (double a, double b) {
    return a < b ? a : b;
}

答案 1 :(得分:1)

根据javadocsmin中的Double方法仅在JDK 8中添加。

您应该确保您正在运行针对JDK8的代码。此外,如果您想使用低于v8的JDK,请考虑使用Math的min方法。