Frage

kann ich dieses JNA Beispielcode kompilieren (von Schritt 2 von https://github.com/ twall / jna / # getting_started ):

package com.sun.jna.examples;

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;

/** Simple example of JNA interface mapping and usage. */
public class HelloWorld {

    // This is the standard, stable way of mapping, which supports extensive
    // customization and mapping of Java to native types.
    public interface CLibrary extends Library {
        CLibrary INSTANCE = (CLibrary)
            Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"),
                               CLibrary.class);

        void printf(String format, Object... args);
    }

    public static void main(String[] args) {
        CLibrary.INSTANCE.printf("Hello, World\n");
        for (int i=0;i < args.length;i++) {
            CLibrary.INSTANCE.printf("Argument %d: %s\n", i, args[i]);
        }
    }
}

... mit javac -classpath .:jna.jar -g HelloWorld.java ohne Fehler. (I heruntergeladen jna.jar und steckte es in demselben Verzeichnis wie HelloWorld.java für jetzt.)

Aber wenn ich es mit java -classpath .:jna.jar HelloWorld laufen, erhalte ich:

Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong name: com/sun/jna/examples/HelloWorld)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)

ich genau die gleiche Ausnahme unter Mac OS X und Linux bekommen.

Wie erhalte ich diese laufen?

War es hilfreich?

Lösung

In diesem Beispiel (wie auch überwiegende Mehrheit der Java-Klassen) verwendet Pakete:

package com.sun.jna.examples;

Um zu kompilieren / ausführen es richtig benötigen Sie javac / java aus dem „root“ -Ordner laufen (zum Beispiel Ordner, in der „com“ befindet):

Angenommen, Sie haben einen Ordner namens examples. Sie würden sowohl die jna.jar setzen und den Quellcode in es Erhaltung Ordnerstruktur :

/examples
 jna.jar
 /com
   /sun
      /jna
         /examples
           HelloWorld.java

Sie kompilieren und ausführen mit:

javac -classpath .:jna.jar -g com/sun/jna/examples/HelloWorld.java

java -classpath .:jna.jar com.sun.jna.examples.HelloWorld

Beachten Sie die Pfadtrenn im ersteren Fall und Punkte in den letzteren.

Andere Tipps

So oder entfernen Sie diese Zeile und recompile (was in Ordnung ist in diesem Fall, wie Sie nur einiges Beispiel ausprobieren)

package com.sun.jna.examples;

oder lesen Sie auf, welche Pakete in Java sind und wie sie behandelt werden (ChssPly76s Beiträge als Starter).

Bessere wählen Sie die zweite Option als früher oder später (wahrscheinlich früher) Sie ohnehin mit Paketen umgehen müssen. So gerade jetzt die Zeit nehmen, auf sie zu lesen.

Hier ist ein gutes Beispiel (in Spanisch), http: //bdevmex.blogspot.mx/2013/01/comunicar-aplicaciones-mediante-jna.html ich hoffe, dass dies kann Ihnen helfen,

In Eclipse unter Java Build path > Order and export, wählen export jna.jar.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top