使用SWIG将异常类型映射到java,仍然未捕获 我试图使用SWIG将一些C++代码封装到java中。代码一般都能正常工作,现在我正在处理错误。C++代码抛出了两种例外类型。我已经通过了所有的C++代码,并添加到函数标题中的抛出(…),并将其添加到我的SWIG。 %include "exception.i" %typemap(throws, throws="java.io.IOException") std::ios_base::failure { jclass excep = jenv->FindClass("java/io/IOException"); if (excep) jenv->ThrowNew(excep, $1.what()); return $null; } %typemap(javabase) std::ios_base::failure "java.lang.Exception"; %typemap(throws, throws="java.lang.IllegalArgumentException") std::invalid_argument { jclass excep = jenv->FindClass("java/lang/IllegalArgumentException"); if (excep) jenv->ThrowNew(excep, $1.what()); return $null; } %typemap(javabase) std::invalid_argument "java.lang.Exception";
当我查看生成的java文件时,它们似乎都正确地完成了,也就是说,应该在java中引发异常的函数是通过throws指定的。。。但是,当我运行代码并执行一个在C++端生成异常的命令时,它不会被包装器捕获,而我得到:使用SWIG将异常类型映射到java,仍然未捕获 我试图使用SWIG将一些C++代码封装到java中。代码一般都能正常工作,现在我正在处理错误。C++代码抛出了两种例外类型。我已经通过了所有的C++代码,并添加到函数标题中的抛出(…),并将其添加到我的SWIG。 %include "exception.i" %typemap(throws, throws="java.io.IOException") std::ios_base::failure { jclass excep = jenv->FindClass("java/io/IOException"); if (excep) jenv->ThrowNew(excep, $1.what()); return $null; } %typemap(javabase) std::ios_base::failure "java.lang.Exception"; %typemap(throws, throws="java.lang.IllegalArgumentException") std::invalid_argument { jclass excep = jenv->FindClass("java/lang/IllegalArgumentException"); if (excep) jenv->ThrowNew(excep, $1.what()); return $null; } %typemap(javabase) std::invalid_argument "java.lang.Exception";,java,c++,swig,Java,C++,Swig,当我查看生成的java文件时,它们似乎都正确地完成了,也就是说,应该在java中引发异常的函数是通过throws指定的。。。但是,当我运行代码并执行一个在C++端生成异常的命令时,它不会被包装器捕获,而我得到: libc++abi.dylib: terminate called throwing an exception Abort trap: 6 好吧,我知道了。当然是我的错。由于C++代码中的某些原因,我决定通过指针抛出异常,即“代码>抛出新的…。改变了这一点,现在它正在按预期工作
libc++abi.dylib: terminate called throwing an exception
Abort trap: 6
好吧,我知道了。当然是我的错。由于C++代码中的某些原因,我决定通过指针抛出异常,即“代码>抛出新的…<代码>。改变了这一点,现在它正在按预期工作