2009-12-23 3 views
4

ОТКАЗ:Невозможно использовать JFace и SWT в затмении без создания Plugin

это классический случай .NET GUI пытается работать свой путь вокруг JAVA вещи.

ПРОБЛЕМА ОПИСАНИЕ:

Я пытаюсь построить очень простой графический интерфейс с JFace и SWT - код является простым (есть много учебников), что это не так просто, что я не могу показаться, заставить JFace и SWT работать вне проекта плагина.

Я бы ожидал, что у меня будет возможность использовать JFace и SWT в моем проекте без хлопот, так как я положил «C:/eclipse 3.5/plugins» в свой CLASSPATH (с моего компьютера -> свойства -> расширенный - > переменные окружения) и все swt - * .dll, которые я мог бы найти в моем PATH (как для локального пользователя, так и для глобальных PATH), поскольку this article указывает в поле «Установка SWT и JFace».

Проблема заключается в том, что я ничего не могу импортировать с eclipse.org, если я не ссылаюсь непосредственно на банки из пути построения -> libraries -> добавлять внешние банки (для его сборки я должен добавить следующие банки: org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar, org.eclipse.jface_3.5.1.M20090826-0800.jar). После того, как я, что он строит нормально, но когда я запускаю его как «Java Application», я получаю следующее сообщение об ошибке (если я RUN AS что-то другое?):

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor 
    at demo.ui.test.EntryPoint.main(EntryPoint.java:18) 
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IProgressMonitor 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252) 
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 
    ... 1 more 

Я пытался отладить это и в основном это вызывается, как только он пытается создать экземпляр класса ApplicationWindow (org.eclipse.jface.window.ApplicationWindow). Попытка воспроизвести ошибку, я заметил, все мои код и заменить его следующим в моей основной и бросает он ту же ошибку, как описано выше на первой линии:

ApplicationWindow w = new ApplicationWindow(null); //<-- error on this line 
w.setBlockOnOpen(true); 
w.open(); 
Display.getCurrent().dispose(); 

ВОПРОСЫ:

Вопрос 1: как я могу исправить ошибку выше (я хотел бы понять, что происходит) и получить эту чертову вещь?

Вопрос 2: почему банки не видны моему проекту и как их сделать?

Возможно, что у меня отсутствует кое-что очень тривиальное из-за моего незнания с Java и затмением. Любая помощь высоко ценится!

EDIT: кажется, что кто-то еще была такая же проблема ->http://www.eclipsezone.com/eclipse/forums/t60528.html - не слишком ясно, как они решили ее, хотя, помощь оценили

ответ

11

IProgressMonitor интерфейс недоступен в этих двух банках, которые вы используете. Вам также нужно установить плагин org.eclipse.equinox.common на свой путь к классу. IProgressMonitor может использоваться без использования всей среды eclipse.

(Это решение из статьи, на которую вы ссылаетесь. Первоначально я думал, что IProgressMonitor находится в плагине org.eclipse.core.runtime, но он перемещен в org.eclipse.equinox.общий, как описано в bug #122935)

+1

спасибо - мне удалось это понять, но в этой статье потребовалось некоторое время, так как в этой статье они говорили о файле MANIFEST, который у меня нет, так как я нахожусь на простой Java. Поэтому я просто продолжил и добавил ссылку на org.eclipse.equinox.common, и он исправил ее (начал набрасывать еще одну ошибку в EventManager, но исправил ее, ссылаясь на org.eclipse.core.commands). Я нашел это очень запутанным ... Я должен получить некоторые предупреждения, если некоторые вещи, которые мне нужны для запуска приложения, отсутствуют. – JohnIdol

+0

Это действительно сбивает с толку. Если вы разрабатываете плагин eclipse, вы получите все предупреждения, так как зависимости в плагине записываются в файле MANIFEST.MF. Если вы прямо ссылаетесь на некоторый класс/интерфейс, который отсутствует, вы также получите предупреждение. Но использование jar-файлов в автономном приложении сложно, и вам нужно искать зависимости самостоятельно (или использовать что-то вроде Ivy или Maven). –

+0

Как вы добавляете 'org.eclipse.equinox.common' в свой путь к классам? Можете ли вы предоставить инструкции? Откуда вы его и откуда его устанавливаете? – CodyBugstein

6

Повторяя пункт Петра выше, я всегда должен добавить кучу JAR, чтобы все было в порядке (особенно для JFace). Как правило, мне нужно

./org.eclipse.core.commands_3.3.0.I20070605-0010.jar 
./org.eclipse.core.runtime_3.3.100.v20070530.jar 
./org.eclipse.equinox.common_3.3.0.v20070426.jar 
./org.eclipse.jface_3.3.1.M20070910-0800b.jar 
./org.eclipse.osgi_3.3.2.R33x_v20080105.jar 
./org.eclipse.ui.forms_3.3.0.v20070511.jar 

Вы можете использовать что-то вроде jarfinder, чтобы помочь определить, какие файлы живут в каком баночках. В Windows я, кажется, помню, используя функцию поиска, чтобы искать, скажем, IProgressMonitor.class в файлах zip/jar в папке eclipse в файловой системе, так как иногда JAR-файлы могут быть трудно отследить.

Обычно я работаю, наблюдая, что не удается, отслеживание/добавление JAR, полоскание и повторение.

Выполнение RCP/плагинов похоже на то, что Eclipse позаботится о многих проблемах для вас, поэтому ваше собственное автономное приложение поставляется с этим дополнительным багажом, но его действительно приятно иметь собственный автономный внешний вид GUI, если вы придерживаетесь с этим. Поэтому я обычно настраиваю проекты vcl (non-plugin) eclipse, и это заставляет вас противостоять этим проблемам (добавьте JAR в путь к классам вручную). Это также пригодится, когда вы хотите распространять свой проект.

+0

Работал для меня :) – CodyBugstein

+0

+1 его рабочий, thx – justSaid

 Смежные вопросы

  • Нет связанных вопросов^_^