2015-10-15 23 views
1

我正在使用SWIG將C++庫封裝到JAVA中,遵循Handling C++ exceptions in Java via SWIG的想法。SWIG和例外:避免在C++中使用throw(Exception)

我已經能夠包裝我所有的異常,但是如果在C++聲明中沒有明確告知啓動異常的函數,那麼JAVA代碼不起作用。例如: 如果我做

class A { 
    public: 
     void f() throw (MyException){}; 

一切都按預期進行。但是,如果我做

class A { 
    public: 
     void f(){}; 

當我趕上JAVA異常使用代理類

try { 
    // this is the proxy wrapped (java) class 
    A.f(); 
} 
catch(MyException e) 
{ 
    ... 
} 

Java編譯失敗,出現以下錯誤

exception MyExceptionn is never thrown in body of corresponding try statement 

我不想如果我可以避免使用異常通知,請在我的C++代碼中使用http://www.gotw.ca/publications/mill22.htm。問題是,我可以避免它嗎?怎麼樣?

+0

你檢查http://web.mit.edu/Ghudson/trac/src/swig-1.3.25 /Doc/Manual/Java.html#exception_handling?顯然你必須捕捉C++異常並拋出一個Java異常。 – Esus

回答

1

使MyExtension擴展RuntimeException而不是Exception,那麼它可以從任何函數拋出,而不僅僅是顯式聲明throws子句的函數。

static class MyException extends RuntimeException { 

} 

...

static void f() { 
    throw new MyException(); 
} 

...

try { 
    f(); 
} catch(MyException e) { 

} 
+0

它的工作!謝謝! – Bernat