0
我正在嘗試使用SWIG將一些C++代碼包裝到java中。代碼一般工作,現在我正在處理錯誤。 C++代碼拋出了幾種類型的異常。我已經通過所有的C++代碼,增加了擲(...)去功能標題,並添加這個我痛飲.i文件:使用SWIG對Java進行類型映射,但仍未捕獲
%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++端生成異常的命令時,它不會被捕獲包裝和我得到:
libc++abi.dylib: terminate called throwing an exception
Abort trap: 6