Я пытаюсь использовать некоторые инструменты линейного программирования с 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();
возвращает нуль. Документация
Ищет поставщика услуг LinearProgramSolver и возвращает первый найденный экземпляр. Если служба не найдена, она выводит трассировку стека на stderr и возвращает значение null. Когда этот метод сначала вызывается, он инициализирует ServiceLoader, который находит доступные службы из пути к классам. Последующие вызовы используют результат этой первой инициализации. Поэтому, если в момент первого вызова нет доступных услуг, для остальной части программы не будет доступных сервисов. Будущие реализации могут игнорировать эту проблему.
но я не знаю, что делать, чтобы исправить эту проблему. В этом пункте я хотел бы помочь. Я не могу много понять из существующего примера, и я не знаю, что делать.
Может кто-нибудь, пожалуйста, дайте мне примерный пример, чтобы понять, что происходит? заранее спасибо
Если в вашей системе установлено несколько JDK. На IntelliJ убедитесь, что вы выбрали правильный SDK для версии x86 JDK. Его легче отслеживать, если вы назовете свои SDK в "Настройки платформы" → SDK
У меня такая же проблема, вам нужно установить JDK7 x86, а затем она работает. Протестировано на IntelliJ с помощью jdk-7u79-windows-i586.