带有Java nullPointerException的SCPSolver。一个可运行的例子

时间:2015-02-08 12:41:51

标签: java linear-programming scpsolver

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

所以我尝试运行SCPSolver主页中显示的示例:the low lever interface example

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();重新为空。文档sais

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

但我不知道如何解决这个问题。在这一点上,我希望得到你的帮助。我从现有的例子中无法理解,我不知道该怎么做。

有人可以给我一个可运行的例子,以便了解发生了什么?提前谢谢

2 个答案:

答案 0 :(得分:1)

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

enter image description here

答案 1 :(得分:0)

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