我在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中完全相同。
答案 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)