diff --git a/wpimath/src/main/native/cpp/jni/WPIMathJNI.cpp b/wpimath/src/main/native/cpp/jni/WPIMathJNI.cpp index 8c81a26d59..18d887b63a 100644 --- a/wpimath/src/main/native/cpp/jni/WPIMathJNI.cpp +++ b/wpimath/src/main/native/cpp/jni/WPIMathJNI.cpp @@ -4,6 +4,8 @@ #include +#include + #include #include "Eigen/Core" @@ -71,15 +73,22 @@ Java_edu_wpi_first_math_WPIMathJNI_discreteAlgebraicRiccatiEquation Eigen::Matrix> Rmat{nativeR, inputs, inputs}; - Eigen::MatrixXd result = - drake::math::DiscreteAlgebraicRiccatiEquation(Amat, Bmat, Qmat, Rmat); + try { + Eigen::MatrixXd result = + drake::math::DiscreteAlgebraicRiccatiEquation(Amat, Bmat, Qmat, Rmat); - env->ReleaseDoubleArrayElements(A, nativeA, 0); - env->ReleaseDoubleArrayElements(B, nativeB, 0); - env->ReleaseDoubleArrayElements(Q, nativeQ, 0); - env->ReleaseDoubleArrayElements(R, nativeR, 0); + env->ReleaseDoubleArrayElements(A, nativeA, 0); + env->ReleaseDoubleArrayElements(B, nativeB, 0); + env->ReleaseDoubleArrayElements(Q, nativeQ, 0); + env->ReleaseDoubleArrayElements(R, nativeR, 0); - env->SetDoubleArrayRegion(S, 0, states * states, result.data()); + env->SetDoubleArrayRegion(S, 0, states * states, result.data()); + } catch (const std::runtime_error& e) { + jclass cls = env->FindClass("java/lang/RuntimeException"); + if (cls) { + env->ThrowNew(cls, e.what()); + } + } } /*