Drools计划员说"解决失败"使用NullpointerException

时间:2012-08-04 19:04:13

标签: java drools drools-planner

我使用了drools planner的检查示例来创建我自己的示例。除了一个规则之外,我重命名了这些类并删除了每个规则。应用程序启动,我可以加载我的XML文件。单击“解决”-Button时发生错误:

pool-2-thread-1] ERROR swingui.SolverAndPersistenceFrame - Solving failed.
java.lang.NullPointerException: null

有人能给我提示解决这个问题吗?我不知道错误信息的含义。

谢谢。

2 个答案:

答案 0 :(得分:0)

这是整个错误消息!

问题是cloneSolution方法。我忘了实施这个方法。因此解算器无法找到解决方案,因为它必须克隆我的对象。

对于每个人:不要忘记实现此方法并复制得分属性。没有分数,这将不是一个真正的解决方案。

答案 1 :(得分:0)

在Planner 5.5.0.Beta1的SNAPSHOT上,我在cloneSolution方法中添加了一个NPE并得到了这个堆栈跟踪:

2012-08-06 08:56:08,157 [AWT-EventQueue-0] INFO  Loaded: data/cloudbalancing/unsolved/cb-0100comp-0300proc.xml
2012-08-06 08:56:09,122 [pool-2-thread-1] ERROR Solving failed.
java.lang.NullPointerException: null
    at org.drools.planner.examples.cloudbalancing.domain.CloudBalance.cloneSolution(CloudBalance.java:92) ~[classes/:na]
    at org.drools.planner.examples.cloudbalancing.domain.CloudBalance.cloneSolution(CloudBalance.java:31) ~[classes/:na]
    at org.drools.planner.core.solver.DefaultSolverScope.setWorkingSolutionFromBestSolution(DefaultSolverScope.java:154) ~[classes/:na]
    at org.drools.planner.core.solver.DefaultSolver.solvingStarted(DefaultSolver.java:176) ~[classes/:na]
    at org.drools.planner.core.solver.DefaultSolver.solve(DefaultSolver.java:154) ~[classes/:na]
    at org.drools.planner.examples.common.business.SolutionBusiness.solve(SolutionBusiness.java:276) ~[classes/:na]
    at org.drools.planner.examples.common.swingui.SolverAndPersistenceFrame$SolveAction$1.run(SolverAndPersistenceFrame.java:252) ~[classes/:na]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) [na:1.6.0_26]
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) [na:1.6.0_26]
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) [na:1.6.0_26]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_26]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_26]
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_26]

因此,堆栈跟踪吃代码必须在您的自定义SolverAndPersistenceFrame代码中(可能会从可能存在此类错误的旧版Planner版本中复制)。