1

我正在尝试在 Java 中使用一些线性编程工具。我决定探索 SCPSolver,因为它带有文档。

所以我尝试运行 SCPSolver 主页中所示的示例:低杠杆接口示例

public class SCPSolverDemo {
  public static void main(String ag[]){
    LinearProgram lp = new LinearProgram(new double[]{5.0,10.0}); 
    lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[]{3.0,1.0}, 8.0, "c1")); 
    lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[]{0.0,4.0}, 4.0, "c2")); 
    lp.addConstraint(new LinearSmallerThanEqualsConstraint(new double[]{2.0,0.0}, 2.0, "c3")); 
    lp.setMinProblem(true); 
    LinearProgramSolver solver  = SolverFactory.newDefault();
    double[] sol = solver.solve(lp);
    System.out.println(Arrays.toString(sol)); //line 23
  }
}

当我运行它时,我收到一条错误消息

Exception in thread "main" java.lang.NullPointerException
at drafts.SCPSolverDemo.main(SCPSolverDemo.java:23)

我意识到SolverFactory.newDefault();返回null。文件说

搜索 LinearProgramSolver 服务的服务提供者并返回它找到的第一个实例。如果没有找到服务,它将堆栈跟踪打印到 stderr 并返回 null。当这个方法第一次被调用时,它会初始化 ServiceLoader,它会从类路径中找到可用的服务。后续调用使用第一次初始化的结果。因此,如果在第一次调用时没有可用的服务,则程序运行的其余部分将没有可用的服务。未来的实现可能会忽略这个问题。

但我不知道该怎么做才能解决这个问题。在这一点上,我需要你的帮助。我不能从现有的例子中理解很多,我不知道该怎么做。

有人可以给我一个可运行的例子,以了解发生了什么吗?先感谢您

4

2 回答 2

1

如果您在系统上安装了多个 JDK。在 IntelliJ 上,确保为 x86 JDK 版本选择了正确的 SDK。如果您在“平台设置”-> SDK 中命名您的 SDK,则更容易跟踪

在此处输入图像描述

于 2015-09-07T01:25:15.660 回答
0

我遇到了同样的问题,你需要安装 de JDK7 x86 然后它才能工作。使用 jdk-7u79-windows-i586 在 IntelliJ 上测试。

于 2015-05-06T15:08:14.013 回答