Netbeans: библиотека не найдена после сборки - PullRequest
0 голосов
/ 05 февраля 2011

Вот моя системная информация:

IDE: NetBeans 6,9 ОС: Ubuntu 10.10

Я пишу программу с использованием java и v4l4j (http://code.google.com/p/v4l4j/), которая захватывает кадры с веб-камер и обрабатывает их особым образом. При запуске программы появляется диалоговое окно с запросом устройства захвата. программа просмотра запущена. На этом этапе используется класс веб-камеры.

Всякий раз, когда я запускаю программу с функциональностью запуска netbean, все в порядке. Это работает на 100%. Однако, когда я копирую jar и все файлы, необходимые для запуска в другую папку для распространения, он просто не работает. Как только выбранный графический интерфейс завершается и запускается программа просмотра, программа вылетает с этой ошибкой:

Cant load v4l4j JNI library
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no v4l4j in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at au.edu.jcu.v4l4j.VideoDevice.<clinit>(Unknown Source)
at programName.webcam.initVideoDevice(webcam.java:49)
at programName.webcam.<init>(webcam.java:32)
at programName.Main.initCamera(Main.java:164)
at programName.Main.initCamera(Main.java:184)
at programName.Main.<init>(Main.java:82)
at programName.openingWindow$checker.actionPerformed(openingWindow.java:126)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6267)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6032)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Опять же, это происходит только тогда, когда заканчивается сторона NetBeans. Я скопировал папку lib в тот же каталог, что и jar. Вот, в основном, что у меня есть:

directory root/
    program.jar
    data/
        images/
        settings/
    lib/
        v4l4j.jar

Все файлы в папке dist NetBEans были скопированы, и у меня есть все необходимые файлы ресурсов, такие как изображения и файлы настроек. По какой-то причине это работало идеально до недавнего времени, когда я начал получать эту ошибку.

Кроме того, вот функция, на которую ссылается ошибка. Это первый случай, когда класс использует отсутствующую библиотеку.

private void initVideoDevice() throws Exception {
    vd = new VideoDevice(path);
    fg = vd.getJPEGFrameGrabber((int)resolution.getWidth(), (int)resolution.getHeight(), 0, standard, quality);
}

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

Как указало BuHHu-nyx, это происходит потому, что не может быть найдена разделяемая библиотека JNI v4l4j (libv4l4j.so).Вы должны указать JVM, где найти эту библиотеку (и ее зависимость), используя аргумент -D, КРОМЕ того, что вы должны использовать полный путь к libv4l4j.so, а не v4l4j.jar, как вы пытались.Вы установили v4l4j?Если да, libv4l4j должен быть в /usr/lib/jni.

1 голос
/ 05 февраля 2011

Попробуйте запустить вашу программу следующим образом:

java -Djava.library.path=/absolute/path/to/lib/folder/containing/your/library -jar program.jar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...