2013-02-07 33 views
1

我使用JNI從外部系統調用.jar庫中的Java方法。我的問題是,當我編寫使用該庫的簡單Java程序時,一切正常,但是當我通過JNI執行相同的代碼時,該庫在從String中解析整數時會拋出Null異常。我相信在我的JNI代碼中沒有問題,因爲我有一個更新版本的庫,它具有相同的接口,可以通過JNI正常工作。但不幸的是,由於與外部系統的兼容性問題,我必須使用舊版本。Java通過JNI調用時拋出Null異常,但在從Java程序調用時工作

我認爲問題在於如何jvm.dll創建虛擬機 - 我可能會缺少一些參數,我應該在創建虛擬機時傳遞給jvm.dll。有誰知道問題出在哪裏?

我不能發佈我的代碼,但我可以解釋它例如: - 庫版本1個contatins級路由器與路由器的構造(int i)以 - 我沒有代碼 該類 - 庫版本2個conatins同一類同一構造 - 當我寫簡單的程序

import java.lang.reflect.*; 

public class Basic 
{ 
    public static void main(String[] args) 
    { 
     Router = new Router(10); 
    } 
} 

它的工作原理與這兩個庫。

當我通過JNI運行與更新的庫2相同的代碼時,它也可以工作。 但是,當我與圖書館1通過JNI運行的代碼,它崩潰因以下內部異常

Error message: System.Exception: JAVA Exception: java.lang.NullPointerException 
at com.coda.core.types.TypeNumber.parseNumber(TypeNumber.java:403) 
at com.coda.core.types.TypeInteger.parse(TypeInteger.java:123) 
at com.coda.core.types.TypeInteger.parse(TypeInteger.java:137) 
at com.coda.core.Options.setOption(Options.java:138) 
at com.coda.core.Options.set(Options.java:85) 
at com.coda.core.configuration.ConfigurationLoader.getConfiguration(ConfigurationLoader.java:144) 
at com.coda.xml.Configuration.init(Configuration.java:453) 
at com.coda.xml.Configuration.init(Configuration.java:370) 
at com.coda.xml.router.AppServer.<init>(AppServer.java:250) 
at com.coda.xml.router.Router.<init>(Router.java:122) 
+1

只有一些代碼可能會幫助 – TheWhiteRabbit

+0

發佈您的代碼! –

+0

向我們顯示您的本地代碼 –

回答

0

我已經解決了這個問題。我在JVM的參數上犯了錯誤。舊圖書館需要另一個我不知道的jar庫。所以我已經將庫添加到類路徑中,並且它很好地工作。真是愚蠢的例外,沒有任何說話的消息讓我以錯誤的方式尋找問題。

感謝大家的意見

相關問題