получение javax.mail.MessagingException - PullRequest
       0

получение javax.mail.MessagingException

4 голосов
/ 02 сентября 2011

Я использую файл javax.mail .jar для чтения почтовых сообщений. Но когда я запускаю код, я получаю следующее исключение.

Я добавил mail.jar в classpath.

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/MessagingE
xception
Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: MasterProcess.  Program will exit.

любые предложения для решения этой проблемы, пожалуйста ...

Ответы [ 4 ]

1 голос
/ 28 марта 2013

Работа в eclipse, а не в командной строке ясно говорит о том, что в проекте присутствует несколько версий почтовых jar.

Пример:

У вас есть 3 банки, Jar X, Jar Y и Jar Z.

Если вы не знаете, что JAR X может быть уже включен в JAR Z (в данном случае почтовый jar, но в другой версии.

Так в чем же проблема наличия нескольких версий одной и той же банки? У вас есть две разные версии, и вы не будете знать, на какую ссылку будет ссылаться ваш проект. (поэтому, если вы ищете в своем проекте какой-то класс из mail-2.jar, вы получите исключение «класс не найден», если ссылка на mail-1.jar сделана загрузчиком классов)

Так как же это работает должным образом на Eclipse? В eclipse вы можете видеть, что есть опция для библиотеки ORDER, они будут ссылаться в том же порядке, но во время работы в командной строке мы использовали загрузку как lib / *, которая загружает все для сбора, и мы не будем знать, какая библиотека будет загружен первым.

Как определить виновника и устранить проблему?

Вариант 1:

См. Страницу документации / руководство пользователя используемых вами библиотек, чтобы увидеть, что в них есть.

Вариант 2:

  1. В затмении переместите рассматриваемый JAR (здесь mail.jar) в TOP в порядке пути к классам. (ваша программа должна работать сейчас)
  2. Теперь уменьшите ордер по очереди, чтобы увидеть, где вы получили ошибку. (если вы хотите найти банку, которая вызывает эту проблему, дублируйте ссылку)

  3. Извлеките банку с ссылкой на дубликаты, удалите дубликат внутри банки и перепакуйте его. (если требуется)

1 голос
/ 02 сентября 2011

Вы не получаете MessagingException, виртуальная машина жалуется, что не может найти MessagingException (хотя, вероятно, она ищет его, потому что хочет его выбросить, но тепроблемы на будущее).

Проверьте, действительно ли ваш mail.jar содержит этот класс, и проверьте, действительно ли ваш mail.jar находится в пути к классам.

Последнее, что может случиться, это то, что класс несовместим с вашей версией Java.Например, классы, скомпилированные для 1.5, не будут работать на 1.4.

0 голосов
/ 30 марта 2012

Я также столкнулся с той же ошибкой.Со мной случается так, что при компиляции я правильно использовал банки.При запуске из командной строки я заметил, что mail.jar (javamail API) не был включен.

0 голосов
/ 02 сентября 2011

Также убедитесь, что у вас также есть java активации.jar jar.

Вы случайно работаете с сервером приложений (например, Jboss), если это так, просто проверьте модель загрузки классов (в jboss с одиночной моделью загрузки классов вы можете загружать не очень актуальную версию jar-файлов)

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