Я нашел довольно много об этой ошибке, но почему-то ни одно из предлагаемых решений не разрешило проблему.java.lang.NoClassDefFoundError при попытке создать экземпляр класса из jar
Я пытаюсь использовать привязки JNA для libgphoto2 под Ubuntu в Eclipse (умеренный опыт работы с Java на Eclipse, я ничего не имею на Ubuntu). Связи, которые я хочу использовать, приведены здесь: http://angryelectron.com/projects/libgphoto2-jna/
Я выполнил шаги, описанные на этой странице, и сделал простой тестовый клиент, который не смог выполнить описанную выше ошибку. Поэтому я уменьшил тестовый клиент, пока единственное, что я пытался сделать, это создать экземпляр объекта GPhoto2, который все еще вызывал ошибку. Тестовый клиент выглядит следующим образом:
import com.angryelectron.gphoto2.*;
public class test_class
{
public static void main(String[] args)
{
GPhoto2 cam = new GPhoto2();
}
}
Ошибки, которые я получаю занимают значительно больше места:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jna/Structure
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
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)
at test_class.main(test_class.java:12)
Caused by: java.lang.ClassNotFoundException: com.sun.jna.Structure
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)
... 13 more
libgphoto2 сам установлен, он запускается из командной строки, я даже заголовки развития и я могу вызывать функции GPhoto2 из python, поэтому проблему там невозможно найти.
Однако, если посмотреть на файлы .class в Eclipse, они не имеют никаких определений. Поэтому я подумал, что это может быть проблемой, тем более, что при создании мусора произошла ошибка, хотя jar был успешно экспортирован, из чего я мог понять, что ошибка касается только генерации документации). Итак, я загрузил источник в затмение и сам построил .jar. В этом случае Eclipse заявила, что во время сборки были предупреждения (хотя ошибок не было), но не показывал мне фактических предупреждений. Если кто-нибудь скажет мне, где, черт возьми, журнал сборки пошел, что уже может что-то помочь. Я искал его везде без успеха, и если я нажимаю «детали» в eclipse, он просто сообщает мне, где были предупреждения, а не то, что они были.
Как бы то ни было, предупреждение не обязательно разрушительно, поэтому я импортировал полученный Jar в вышеупомянутого клиента. Я проверил файлы .class, на этот раз они содержали весь код. Но я все равно получаю тот же список ошибок (да, я убедился, что старая библиотека была удалена из пути к классам, а новые добавлены. Я повторил этот процесс несколько раз, на всякий случай).
Поскольку у меня нет опыта работы со строительными баночками, я сделал небольшую банку helloworld, просто чтобы узнать, могу ли я назвать это из другой программы или если у меня будут подобные ошибки. Он работал без сучка и задоринки. Я даже пытался воспроизвести проблему намеренно, экспортируя ее различными вариантами, но она все еще работала. Я попробовал реэкспортировать библиотеку, которая мне действительно нужна, с настройками, которые работали во время моего эксперимента, но они все равно не будут работать. Я почти застрял. Любые подсказки, которые помогут мне решить эту проблему, будут очень признательны.
Можете ли вы вставить свою версию JDK? – chengpohi