2017-09-12 3 views
0

Ich habe ein sehr kleines und einfaches HelloWorld Programm in Java erstellt (hat Interface und in der Klasse hat system.lang.out.println ("Hallo Welt"))). Ich habe es mit Proxy-Gen verpackt. Nun, da ich versuche, es zu C# zu befestigen (gehen durch meCalc Beispiel) bekomme ich folgende Fehlermeldung:jni4net C# mit java in jni4net 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)

mein C# -Code:

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(); 
      } 

Warum ist das so? Was mache ich falsch und wie kann ich es reparieren?

+1

Was ist Ihr Java-Paketnamen beheben könnte helfen? Ich denke, dass der Fehler von "Bridge.RegisterAssembly" stammte, das auf falschen Paketnamen/Klassennamen verweist. –

+0

ja, du hast recht, es scheitert dort. Mein Paketname ist: dt09120958 Wenn ich es zu Paketnamen ändere, bekomme ich: 'dt09120958' ist ein 'Namespace' aber wird wie ein 'Typ' verwendet – aura

+0

Wenn Sie sicher sind Java Paketname & Klassenname 'dt09120958.HelloWorld09120958 'ist korrekt im richtigen Verzeichnis platziert, überprüfen Sie' JAVA_HOME' & Klassenpfadkonfiguration. Verwenden Sie die 'java -version'-Befehlszeile, um die aktuelle Java-Version zu ermitteln, die Sie verwenden. Und was ist mit 'Bridge.RegisterAssembly (typeof (dt09120958.HelloWorld09120958) .Assembly);'? –

Antwort

0

festgestellt, dass Java-Pakete keine Großbuchstaben enthalten dürfen. Das Original-JAR und die J4n.jar müssen sich im selben Ordner wie die EXE-Datei befinden. auch beim Hinzufügen von ihnen stellen Sie sicher, zu projizieren, dass in den Eigenschaften, die sie als „Kopie immer“ gekennzeichnet sind thankyou @Tetsuya Yamamoto

Ich fand auch diese Verbindung, die jemand http://jni4net.com/troubleshoot.html

Verwandte Themen