2015-05-01 2 views
0

классов Я пытаюсь запустить программу с помощью команды:NoClassDefFoundError с

java Honey -cp ../../jnetpcap-1.3.0/jnetpcap.jar 

и я получаю ошибку названия:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jnetpcap/Pcap 
     at Honey.main(Honey.java:18) 
Caused by: java.lang.ClassNotFoundException: org.jnetpcap.Pcap 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
     ... 1 more 

Я бы очень признателен, если кто-то могут указать на мне, что я могу делать неправильно.

+0

проверить, если файлы в вашей корзине находятся в правильных каталогах - https://docs.oracle.com/javase/tutorial/deployment/jar/view.html – Leo

+0

jar tf jnetpcap.jar | grep Pcap.class дает мне org/jnetpcap/Pcap.class –

+0

не уверен, но поскольку это зависит от родной библиотеки, возможно, это не может хорошо справиться с «косвенностями» в пути. Убедитесь, что установлена ​​родная библиотека и скопируйте банку в тот же каталог, что и ваш класс «Honey», и повторите попытку – Leo

ответ

1

Вы должны явно указать JVM, где находится родной библиотеки.

Попробуйте что-то вроде этого

Судо ../jdk1.8.0_45/bin/java -Djava.library.path =/дома/leoks/Загрузки/jnetpcap-1.3.0 -cp:. Jnetpcap.jar Мед

Я не знаю, как «Мед» выглядит, так что я использовал это вместо

http://jnetpcap.com/?q=examples/classic

Для этого конкретного примера, так как он требует специального разрешения, я запустить его используя sudo.

Для этого примера я скачал jnetpcap для Ubuntu 64-битном здесь

http://sourceforge.net/projects/jnetpcap/files/jnetpcap/1.3/jnetpcap-1.3.0-1.ubuntu.x86_64.tgz/download

я использовал Oracle JDK 1.8.0_45 и Ubuntu 14.04.2 LTS

2

-cp как все JVM опция запуска работает только если вы поместите его перед тем имя класса, который вы хотите запустить, или вариант -jar, если вы используете, что для запуска проявленного основного класса. Любые токены после имя класса или -jar имя передается в качестве аргументов в вашу программу. После того, как вы фиксируете, что вы обнаружите, что вам нужен путь к классам, содержат как jnetpcap банку, а также ваш класс (ы), так что вам нужно что-то вроде

jar -cp .:path/to/jnetpcap.jar Honey 
# on Windows use ; instead of :