Android项目使用SCPSolver求解线性规划时触发空指针异常
SCPSolver在Android中调用solve方法出现空指针异常的解决办法
我在Android项目中使用SCPSolver求解线性规划问题,已下载Jar包并添加至lib目录,调用solve方法前一切看似正常,但调用该方法时出现了空指针异常。
问题代码
import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; import scpsolver.constraints.LinearBiggerThanEqualsConstraint; import scpsolver.constraints.LinearSmallerThanEqualsConstraint; import scpsolver.lpsolver.LinearProgramSolver; import scpsolver.lpsolver.SolverFactory; import scpsolver.problems.LinearProgram; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 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); } }
报错信息
java.lang.RuntimeException: 无法启动Activity Attempt to invoke interface method 'double[] scpsolver.lpsolver.LinearProgramSolver.solve(scpsolver.problems.LinearProgram)' on a null object reference .... Caused by: java.lang.NullPointerException: 在空对象引用上调用接口方法'double[] scpsolver.lpsolver.LinearProgramSolver.solve(scpsolver.problems.LinearProgram)'
解决办法
空指针的核心原因是SolverFactory.newDefault()返回了null,SCPSolver的默认求解器依赖在Android环境下无法被正确加载或缺失。可以按以下步骤处理:
- 检查SCPSolver Jar包是否完整,确认其依赖的第三方库(如Apache Commons Math)已一同添加到项目的lib目录中
- 避免使用
SolverFactory.newDefault(),直接实例化具体的求解器实现类,例如ApacheCommonsSolver(需确保对应依赖已引入) - 确认Android项目的依赖配置正确,在Module的
build.gradle文件中添加Jar包的依赖声明,比如:implementation files('libs/scpsolver.jar') implementation files('libs/commons-math3-x.x.jar')
内容的提问来源于stack exchange,提问作者Abdalnassir Ghzawi
相关产品推荐
相关产品推荐

