Не могу использовать JFace и SWT в затмении без создания плагина - PullRequest
4 голосов
/ 23 декабря 2009

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ :

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

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

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

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

Проблема в том, что я не могу импортировать что-либо из eclipse.org, если я не ссылаюсь непосредственно на jar-файлы из buildpath -> библиотеки -> добавить внешние jar-файлы (для его сборки мне необходимо добавить следующие jar-файлы: org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar , org.eclipse.jface_3.5.1.M20090826-0800.jar ). Как только я это сделаю, он будет работать нормально, но когда я запускаю его как «Java-приложение», я получаю следующую ошибку (я должен 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 и затмения. Любая помощь высоко ценится!

РЕДАКТИРОВАТЬ : похоже, что у кого-то еще была такая же проблема -> http://www.eclipsezone.com/eclipse/forums/t60528.html - хотя не слишком ясно, как они решили ее, помощь приветствуется

Ответы [ 2 ]

11 голосов
/ 23 декабря 2009

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

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

6 голосов
/ 19 января 2010

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

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

Использование RCP / плагинов похоже на то, что Eclipse позаботится о многих проблемах для вас, создание вашего собственного автономного приложения идет с этим дополнительным багажом, но очень приятно иметь надлежащий автономный графический интерфейс, если вы придерживаетесь Это. Поэтому я обычно настраиваю ванильные (не подключаемые) проекты затмения, и это заставляет вас противостоять этим проблемам (добавьте JAR-файлы в classpath вручную). Это также удобно, когда вы хотите распространять свой проект.

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