问题描述
我第一次尝试将CP Optimizer与Java一起使用时,在运行程序时出现以下错误消息:
Exception in thread "main" java.lang.NoSuchMethodError: SwigDirector_IloIntValueEvalWrapper_eval
at ilog.cp.cppimpl.cp_wrapJNI.swig_module_init(Native Method)
at ilog.cp.cppimpl.cp_wrapJNI.<clinit>(cp_wrapJNI.java:802)
at ilog.cp.cppimpl.IloCP.<init>(IloCP.java:109)
at ilog.cp.IloCP.<init>(IloCP.java:128)
at ilog.cp.IloCP.<init>(IloCP.java:120)
at buffPos.main(buffPos.java:73)
知道在IntelliJ IDEA中项目的库设置以及Windows的环境变量PATH中都包含了所需的库ILOG.CP.jar和oplall.jar。我正在使用jdk 15.0.1
使用iloIntVar的程序部分是:
// define new model
IloCP modelPos = new IloCP();
// variables
IloIntVar[][] x = new IloIntVar[ligne + 1][];
for (int i = 0; i < ligne + 1; i++) {
x[i] = modelPos.boolVarArray(colone + 1);
}
IloIntVar[][] a = new IloIntVar[ligne + 1][colone + 1];
解决方法
- 最好发布完整的Method的主要内容,因为有Exception的根。
2a)如果它是静态代码:请尝试查看是否已在JVM中加载了类(甚至是哪个JAR库中的哪个类)。 使用-verbose选项来运行Java应用程序:
java -verbose ...
2b)检查“运行配置”中已配置了哪些类和库。也许lib不在其中(绿色 run 三角形旁边的右上角)。 “编辑配置”并查看类路径。
2c)如果您使用任何软件包控制系统(Maven等),这将有助于理解
3a)因为涉及到JNI,所以请确保在被JNI调用时在JVM中找不到方法“ NoSuchMethodError”时被调用的类和方法可用。不幸的是,并非所有信息都可在您的代码段中用于调试代码。但这很有可能是这里所说的错误。