Я получаю необъяснимое исключение NullPointerException в моей программе OptaPlanner:
09:52:08.016 [main] INFO org.reflections.Reflections - Reflections took 44 ms to scan 1 urls, producing 5 keys and 5 values
09:52:08.163 [main] INFO o.o.core.impl.solver.DefaultSolver - Solving started: time spent (17), best score (-191hard/3350soft), environment mode (REPRODUCIBLE), random (JDK with seed 0).
Exception in thread "main" java.lang.NullPointerException
at org.optaplanner.core.impl.solver.recaller.BestSolutionRecaller.updateBestSolution(BestSolutionRecaller.java:128)
at org.optaplanner.core.impl.solver.recaller.BestSolutionRecaller.updateBestSolution(BestSolutionRecaller.java:123)
at org.optaplanner.core.impl.constructionheuristic.DefaultConstructionHeuristicPhase.phaseEnded(DefaultConstructionHeuristicPhase.java:154)
at org.optaplanner.core.impl.constructionheuristic.DefaultConstructionHeuristicPhase.solve(DefaultConstructionHeuristicPhase.java:102)
at org.optaplanner.core.impl.solver.AbstractSolver.runPhases(AbstractSolver.java:87)
at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:173)
at JantermRunner.main(JantermRunner.java:28)
Я впервые использую OptaPlanner, поэтому я полностью уверен, что где-то ошибся, но эта ошибка на самом деле не дает мне никакой информации о том, где я ошибся, поскольку все упомянутые строки являются кодом OptaPlanner. (Строка 28 JantermRunner - это просто вызов solver.solve)
Обновлено: Чтобы быть ясным - я понимаю, что такое исключение нулевого указателя, я просто не знаю, как настроить мою программу OptaPlanner таким образом, чтобы она не вызывала ее где-то в будущем.
Возможный дубликат Что такое исключение NullPointerException и как его исправить?
@HovercraftFullOfEels, но разве в этом случае stacktrace не будет состоять только из этой строки?
@ f1sh Нет. Это зависит от того, в какой момент разыменовывается параметр. Если solve не выполняет защитных проверок, вполне возможно, что он может оказаться на некотором пути вниз по иерархии вызовов, прежде чем будет разыменован.
У меня - решатель не равен нулю.
Определенно вызывается функция решения. Я предполагаю, что проблема возникает примерно в тот момент, когда копируется лучшее решение, но я не уверен.
Это странно, я никогда не видел там NPE. Какой это номер версии?




Готов поспорить, вы используете свой EasyScoreCalculator, и он возвращает null как Score.
Я настрою OptaPlanner, чтобы в этом случае отображалось хорошее сообщение об ошибке.
"(JantermRunner line 28 is just the call to solver.solve)"- вы тестировали, является лиsolverнулевым? Вероятно, это так. Теперь оглянитесь назад, чтобы понять, почему.