Получение класса не найдено Исключение при запуске в затмении - PullRequest
7 голосов
/ 21 февраля 2010

Я выполняю следующий код в Eclipse, но получаю исключение класса не найден:

         import org.eclipse.jface.window.Window;
         import org.eclipse.swt.SWT;
         import org.eclipse.swt.widgets.Display;
         import org.eclipse.swt.widgets.Shell;



        public class DialogClass {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println("TEst");
    Shell frame = new Shell(SWT.SHELL_TRIM);

    PublishGenericArtefactDialog publishGenericArtefactDialog =            
                       new PublishGenericArtefactDialog(frame);

    publishGenericArtefactDialog.setTitle("Test");

    if (publishGenericArtefactDialog.open() == Window.CANCEL){
        try {
            throw new Exception("Cancelled");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
      }
       }

       }

и я получаю ошибку

    TEst
    Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IStatus
at DialogClass.main(DialogClass.java:19)
     Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IStatus
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)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 1 more

нужна помощь

Ответы [ 4 ]

10 голосов
/ 21 февраля 2010

Как уже упоминалось в этой теме

Вы указали org.eclipse.core.runtime в качестве зависимости плагина в Manfest.MF?
Я думаю, чтоIStatus на самом деле находится в пакете Equinox, но среда выполнения включает в себя плагин равноденствия во время выполнения.
Если вы просто запускаете его как приложение Java (например, вставляя Jars в classpath), то вам, вероятно, понадобитсяorg.eclipse.equinox.core/runtime или аналогичный.

Спасибо за ваше предложение.Проблема была решена путем добавления org.eclipse.equinox.common и org.eclipse.core.commands к свойству Java Build Path для проекта, который я запускаю как приложение SWT.

Как упоминалось AlBlue в комментарии, Eclipse wiki на JFace подтверждает:

JFace можно использовать в автономных приложениях SWT + JFace, не требуя Eclipse Runtime или другихчасти платформы Eclipse.
Это было упрощено в 3.2 (2006), при этом единственные предпосылки для JFace были уменьшены до:

  • SWT ,
  • новый org.eclipse.equinox.common плагин,
  • и org.eclipse.core.commands плагин.

Подробнее см. Ошибка 49497 .

В 3.3 добавлена ​​необязательная зависимость от пакета org.osgi.framework, которая определена в org.eclipse.osgi.
Если этот плагин отсутствует, JFace продолжит функционировать, но без поддержки интернационализации своих образов.

2 голосов
/ 21 февраля 2010

Путь к классам для компиляции не обязательно совпадает с путем к классу во время выполнения. Конфигурация запуска (Run-> Run ...) подскажет вам, что там.

Обратите внимание, что SWT-файл jar - это просто классы API - вам потребуется двоичный файл per-os для реальных классов времени выполнения, поэтому он может отсутствовать. Если вы добавите контейнер пути к классу "swt", он должен делать все правильно.

Что такое содержимое .classpath в текущем проекте?

0 голосов
/ 22 января 2011

Когда вы запускаете экспортированный продукт, если вы видите что-то вроде,

org.osgi.framework.BundleException: 
The activator org.eclipse.ui.internal.WorkbenchPlugin 
for bundle org.eclipse.ui.workbench is invalid

...

Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.SWTError

Может быть исправлено через:

  1. Откройте редактор конфигурации продукта в файле вашего продукта
  2. Перейдите на вкладку «Запуск»
  3. очистить поля «Аргументы программы» и «Аргументы виртуальной машины».
  4. Реэкспорт товара
0 голосов
/ 21 февраля 2010

Вы импортировали что-то для этого?

PublishGenericArtefactDialog publishGenericArtefactDialog =            
                       new PublishGenericArtefactDialog(frame);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...