javacpp в eclipse не работает --ClassNotFoundException (используя JNI) - PullRequest
3 голосов
/ 04 января 2012

Я пытаюсь использовать javacpp и сталкиваюсь с некоторыми трудностями с eclipse (+ mac OS).

Когда я запускаю это в моей командной строке - , оно отлично работает :

#include <string>

namespace LegacyLibrary {
    class LegacyClass {
        public:
            const std::string& getProperty() { return property; }
            void setProperty(const std::string& property) { this->property = property; }
        private:
            std::string property;
    };
}

и

import com.googlecode.javacpp.*;
import com.googlecode.javacpp.annotation.*;

@Platform(include="LegacyLibrary.h")
@Namespace("LegacyLibrary")
public class LegacyLibrary {
public static class LegacyClass extends Pointer {
    static { Loader.load(); }
    public LegacyClass() { allocate(); }
    private native void allocate();

    public native @ByRef String getProperty();
    public native void setProperty(String property);
}

public static void main(String[] args) {
    LegacyClass l = new LegacyClass();
    l.setProperty("Hello World!");
    System.out.println(l.getProperty());
}

}

, как предлагается в этом сообщении

Я получаю конечный результат: "Привет, мир",

Теперь я беру это в свою среду затмения и по какой-то причине я получаю эту ошибку:

Exception in thread "main" java.lang.NoClassDefFoundError: java.lang.ClassNotFoundException: com.test.LegacyLibrary
    at com.googlecode.javacpp.Loader.load(Loader.java:293)
    at com.googlecode.javacpp.Loader.load(Loader.java:271)
    at com.test.LegacyLibrary$LegacyClass.<clinit>(LegacyLibrary.java:12)
    at com.test.LegacyLibrary.main(LegacyLibrary.java:23)
Caused by: java.lang.ClassNotFoundException: com.test.LegacyLibrary
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at com.googlecode.javacpp.Loader.load(Loader.java:291)
    ... 3 more

Я поместил 2 файла в пакет com.test и javacpp.банку я положил в путь к классу.Есть что-то, что я здесь скучаю?!?!сообщение об ошибке указывает, что что-то в пути к классам неверно (или отсутствует), но что это?(Я также пытался указать в свойствах javacpp.jar в другой папке, но я получаю то же сообщение об ошибке).Может быть, аргументы ВМ?!?!

Спасибо!

Ответы [ 3 ]

0 голосов
/ 07 февраля 2016

Перейдите в Свойства проекта-> Путь сборки Java, на вкладке Источник щелкните стрелку, чтобы развернуть исходную папку, затем выберите «Расположение собственной библиотеки» и нажмите «Редактировать», после того как найдите путь к файлу LegacyLibrary.h и должно работать.

Add native library to Eclipse project

0 голосов
/ 27 мая 2018

Я предполагаю, что ваш maven-файл неправильно настроен и, следовательно, компилятор gcc не может найти ваш исходный файл LegacyLibrary.h.

Настройте ваш pom.xml, используя следующую ссылку в качестве справки.

https://github.com/oltzen/JavaCppExample/blob/master/pom.xml

Обратите внимание на строки 53 и 65. Введите правильные названия пакетов. Это помогает компилятору выяснить, где находится ваш LegacyLibrary.h.

Кроме того, посмотрите этот видеоклип https://www.youtube.com/watch?v=LZrrqZLhtmw, в котором рассказывается, как запустить Javacpp с maven и eclipse.

0 голосов
/ 04 января 2012

Вы добавили файл javacpp.jar в библиотеки проектов?Перейдите в свойства проекта, затем информацию о пути сборки, там должна быть вкладка для библиотек.Добавьте файл External Jar и выберите файл javacpp.jar.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...