2017-09-12 122 views
0

我在java中構建了一個非常小而簡單的helloWorld程序(具有接口並且在類中有system.lang.out.println(「hello world」)))。我用代理gen包裝它。現在,我試圖將其連接到C#(由meCalc例如去)我得到以下錯誤:jni4net jni4net中的java c#java.lang.ClassNotFoundException

Unhandled Exception: net.sf.jni4net.jni.JNIException: Can't load java class for dt09120958.HelloWorld09120958 from classLoader [email protected] ---> java.lang.ClassNotFoundException: dt09120958.HelloWorld09120958 at net.sf.jni4net.jni.JNIEnv.ExceptionTest() at net.sf.jni4net.jni.JNIEnv.CallObjectMethodPtr(IJvmProxy obj, MethodId methodIdNative, Value[] args) at java.lang.ClassLoader.loadClass(String par0) at net.sf.jni4net.utils.Registry.LoadClass(String name, ClassLoader classLoader, JNIEnv env) --- End of inner exception stack trace --- at net.sf.jni4net.utils.Registry.LoadClass(String name, ClassLoader classLoader, JNIEnv env) at net.sf.jni4net.utils.Registry.RegisterClass(RegistryRecord record, ClassLoader classLoader, JNIEnv env) at net.sf.jni4net.utils.Registry.BindJvm(RegistryRecord record, ClassLoader classLoader, JNIEnv env) at net.sf.jni4net.utils.Registry.BindJvm(RegistryRecord record, JNIEnv env) at net.sf.jni4net.utils.Registry.RegisterType(Type type, Boolean bindJVM, JNIEnv env) at net.sf.jni4net.utils.Registry.RegisterAssembly(Assembly assembly, Boolean bindJVM) at net.sf.jni4net.Bridge.RegisterAssembly(Assembly assembly) at netdt09120958.Program.Main(String[] args)

我的C#代碼:

static void Main(string[] args) 
      { 
       var bridgeSetup = new BridgeSetup(); 
       bridgeSetup.AddAllJarsClassPath("."); 
       Bridge.CreateJVM(bridgeSetup); 
       Bridge.RegisterAssembly(typeof(HelloWorld09120958).Assembly); 

       IHelloWorld09120958 calc = new HelloWorld09120958(); 
       calc.SayHello(); 
       Console.ReadKey(); 
      } 

爲什麼會這樣呢?我做錯了什麼,我該如何解決它的工作?

+1

什麼是你的Java包的名字嗎?我認爲錯誤來自'Bridge.RegisterAssembly',它引用了錯誤的包名/類名。 –

+0

是的,你是對的,它確實在那裏失敗。 我的軟件包名稱是:dt09120958 當我將其更改爲軟件包名稱時,我得到:'dt09120958'是'命名空間',但用於'類型' – aura

+0

如果您確定Java軟件包名稱和類名'dt09120958.HelloWorld09120958 '正確放置在正確的目錄下,請檢查'JAVA_HOME'和類路徑配置。使用'java -version'命令行來找出當前使用的Java版本。那麼'Bridge.RegisterAssembly(typeof(dt09120958.HelloWorld09120958).Assembly);'? –

回答

0

發現java包可能不包含任何大寫字母。 原始JAR和j4n.jar必須與exe文件位於同一個文件夾中。還加入當他們到項目確保在性能而被標記爲「複製總是」 三江源@Tetsuya山本

還我發現這種聯繫可能幫助別人解決 http://jni4net.com/troubleshoot.html

相關問題