2011-02-05 78 views
0

這裏是我的系統信息:Netbeans的:庫未找到建後

IDE:NetBeans 6.9中 操作系統:Ubuntu的10.10

我用Java編寫和v4l4j(HTTP的程序://代碼。 google.com/p/v4l4j/),它捕獲網絡攝像頭的幀並以特定的方式處理它們。當程序啓動時,出現一個對話框詢問捕獲設備。一旦設備被選中,一個查看器就會啓動。此時,使用攝像頭類。

每當我運行程序與netbean的運行功能一切都很好。它工作100%。但是,當我將jar文件和需要運行的所有文件複製到不同的文件夾進行分發時,它根本不起作用。只要選擇GUI完成和觀衆啓動程序將與此錯誤崩潰:

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 

所有在NetBeans DIST文件夾中的文件被複制,我有所有需要的資源文件,如圖像和設置文件。出於某種原因,直到最近纔開始工作,直到我開始發現這個錯誤。

此外,這裏是錯誤引用的功能。這是班級使用缺少的圖書館的第一件事。

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

回答

1

由於BuHHu,NYX指出,出現這種情況是因爲v4l4j J​​NI共享庫(libv4l4j.so)無法找到。您必須通過-D參數告訴JVM在哪裏可以找到這個庫(及其依賴關係),除非您已經嘗試過了,您必須使用libv4l4j.so NOT v4l4j.jar的完整路徑。 你安裝了v4l4j嗎?如果是,libv4l4j應該位於/ usr/lib/jni中。

+0

啊,我明白了。最近我一直在改變這個軟件,而在目前的版本中這個問題似乎並不存在。如果我再次遇到它,我會確保遵循這個建議。謝謝。 – 2011-02-13 04:15:33

1

嘗試運行如下程序:

java -Djava.library.path=/absolute/path/to/lib/folder/containing/your/library -jar program.jar 
+0

不幸的是,沒有工作。同樣的錯誤。這就是我跑的:java -Djava.library.path =「/ home/myAccountName/Documents/Work/projectName/Installation Root/.files/lib/v4l4j.jar」-jar program.jar。請注意,我也嘗試了與lib文件夾路徑相同的命令。仍然沒有運氣。我使用cd命令來確保文件路徑是有效的,看起來好像是這樣。 – 2011-02-05 07:30:31