Проблемы при запуске удаленной Java-программы через плагин RSE в Eclipse

Я потратил ужасно много времени на выяснение того, как запустить удаленную программу Java из локального Eclipse с помощью плагина RSE.

Я смог подключиться к своей удаленной машине через eclipse с использованием RSE, и после выполнения Create Remote Project в удаленном проекте maven в eclipse в перспективе Remote System Explorer я смог увидеть свой проект в перспективе Java.

Теперь в Java Perspective, когда я продолжал создавать простой java-файл, составляющий Hello World Program, он выдает мне ошибку,

Я потратил целый день, чтобы выяснить, в чем проблема. Если кто-то сталкивался с этой проблемой раньше или может пролить свет на проблему, то это было бы действительно заметно.

Кроме того, дайте мне знать, если вам нужна дополнительная информация?

Спасибо отслеживание .log в каталоге .metadata рабочей области

!ENTRY org.eclipse.core.jobs 4 2 2013-08-18 01:19:20.101 !MESSAGE An internal error 
occurred during: "Launching abc". !STACK 0 java.lang.NullPointerException at 

org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate.getDefaultWorkingDirectory
(AbstractJavaLaunchConfigurationDelegate.java:995) at 
org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate.verifyWorkingDirectory(AbstractJavaLaunchConfigurationDelegate.java:684) at 
org.eclipse.jdt.launching.JavaLaunchDelegate.launch(JavaLaunchDelegate.java:53) at 
org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:855) at 
org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:704) at 
org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:1047) at  org.eclipse.debug.internal.ui.DebugUIPlugin$8.run(DebugUIPlugin.java:1251) at 
org.eclipse.core.internal.jobs.Worker.run(Worker.java:53)

трассировка .log для нового исключения нулевого указателя

!MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.jface".
!STACK 0
java.lang.NullPointerException
        at org.eclipse.rse.ui.view.SystemTableViewProvider.getText(SystemTableViewProvider.java:221)
        at org.eclipse.jface.viewers.DecoratingLabelProvider.getText(DecoratingLabelProvider.java:129)
        at org.eclipse.rse.internal.ui.view.SystemDecoratingLabelProvider.getColumnText(SystemDecoratingLabelProvider.java:55)
        at org.eclipse.jface.viewers.TableColumnViewerLabelProvider.update(TableColumnViewerLabelProvider.java:70)
        at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:152)
        at org.eclipse.jface.viewers.AbstractTableViewer.doUpdateItem(AbstractTableViewer.java:399)
        at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:485)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49)
        at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
        at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2167)
        at org.eclipse.jface.viewers.StructuredViewer.internalUpdate(StructuredViewer.java:2150)
        at org.eclipse.jface.viewers.StructuredViewer.update(StructuredViewer.java:2089)
        at org.eclipse.jface.viewers.ColumnViewer.update(ColumnViewer.java:554)
        at org.eclipse.jface.viewers.StructuredViewer.update(StructuredViewer.java:2033)
        at org.eclipse.jface.viewers.StructuredViewer.handleLabelProviderChanged(StructuredViewer.java:1191)
        at org.eclipse.jface.viewers.ContentViewer$1.labelProviderChanged(ContentViewer.java:97)
        at org.eclipse.ui.internal.decorators.DecoratorManager$1.run(DecoratorManager.java:430)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
        at org.eclipse.ui.internal.decorators.DecoratorManager.fireListener(DecoratorManager.java:428)
        at org.eclipse.ui.internal.decorators.DecorationScheduler$3.runInUIThread(DecorationScheduler.java:530)
        at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3946)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3623)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053)

person PythonEnthusiast    schedule 18.08.2013    source источник
comment
Вы пытались очистить папку метаданных eclipse? Вы также можете отключить плагин RSE и повторить этот процесс (просто чтобы увидеть, является ли плагин основной причиной того, что вы видите)   -  person Zenil    schedule 22.08.2013
comment
Я попытался удалить папку метаданных, фактически создал новую рабочую область и попытался запустить оттуда, но безуспешно. Как я могу проверить, установлен ли плагин rse, и отключить плагин rse?   -  person PythonEnthusiast    schedule 22.08.2013
comment
Я опубликовал правку в своем ответе, так как здесь было слишком много комментариев.   -  person J-Boss    schedule 27.08.2013


Ответы (4)


Я бы запустил Wireshark, чтобы проверить, что именно происходит по сети. Как бы то ни было, вы летите вслепую в снежную бурю. С Wireshark вы все еще можете быть в снежной буре, но, по крайней мере, вы не будете летать вслепую.

person Mark Leighton Fisher    schedule 21.08.2013
comment
Привет, Марк, я не видел в wirehark ничего, что могло бы помочь нам, почему возникает эта проблема. Сегодня я снова попытался выполнить все шаги, но это исключение NullPointerException причиняет большой вред. Любые другие подсказки? - person PythonEnthusiast; 22.08.2013

Попробуйте удалить плагин и посмотрите. Процесс удаления немного отличается в зависимости от вашей версии eclipse.

Если у вас открыто какое-либо представление, редактор или перспектива, принадлежащие этому плагину, убедитесь, что вы закрыли их все, прежде чем делать следующее.

Вот пара ссылок:

http://wiki.eclipse.org/FAQ_How_do_I_remove_a_plug-in%3F: это также показывает, как просто отключить плагин

Временно отключить подключаемый модуль Eclipse

Если ничего не помогает, вы можете физически удалить плагины из каталога eclipse и перезапустить его. Отключение подключаемых модулей в Eclipse

person Zenil    schedule 22.08.2013
comment
Удаление плагинов rse вручную из каталога плагинов eclipse удалило удаленный системный обозреватель из eclipse. И я не могу найти временное отключение плагина RSE. - person PythonEnthusiast; 23.08.2013
comment
Как насчет того, чтобы попробовать новую свежую версию eclipse и повторить там те же шаги? - person PythonEnthusiast; 23.08.2013
comment
Это должно сработать. Но это тяжелая работа. Какую версию eclipse вы используете? - person Zenil; 23.08.2013
comment
Eclipse Java EE IDE для веб-разработчиков. Версия: Juno Service Release 2 Идентификатор сборки: 20130225-0426 - person PythonEnthusiast; 23.08.2013
comment
Кроме того, я попытался загрузить новое затмение Java на Mac. он не содержит плагина rse, мне нужно скачать плагин rse, чтобы выполнить удаленный обозреватель серверов. скачать это значит, снова застрять в той же проблеме. - person PythonEnthusiast; 23.08.2013
comment
Для отключения плагинов посмотрите, есть ли у вас здесь какие-либо параметры: Eclipse Preferences-> General-> Startup and Shutdown. Также, если вы загружаете новый, почему бы не загрузить eclipse Kepler Java EE (последняя версия)? Может проблема в этом исправлена? - person Zenil; 23.08.2013

Информация, которую вы предоставили здесь, несколько неполная, однако, учитывая шаги, которые вы пытались разрешить, я собираюсь сделать некоторые предположения:

  1. Вы установили плагин и настроили RSE, прикрепив его к удаленному проекту, не создавая для него профиль команды.

  2. Плагин, который вы решили использовать, вопреки передовой практике, напрямую реализовывал подсистему RSE без реализации собственного сервисного уровня.

  3. Затем вы закончили свою работу/обновили версию удаленного проекта/или удалили ссылку на удаленный проект.

Примечание. Я не могу точно сказать, что вы сделали, это может быть много, но в итоге вы прикрепили временный ресурс к своему личному профилю, и этот ресурс стал недоступен.

Откуда мне это знать?

  1. Подсистемы RSE, которые не реализуют свою собственную область сервисного уровня, должны возвращать null из вызовов getServiceType() — начало вашей трассировки стека.

  2. Общедоступный профиль группы должен быть явно создан, а частный профиль создается автоматически. подробнее об этом здесь

  3. компонент UIPlugin находится на расстоянии одного вызова от рабочего потока, а подключаемый модуль пользовательского интерфейса RSE для подсистемы RSE на уровне обслуживания базового API RSE сделает эту подпись трассировки стека.

  4. Делегат запуска пытается запустить конфигурацию, которая имеет вызов поиска источника для вашего профиля, который терпит неудачу - конец вашей трассировки стека.

Чтобы понять, что происходит, вам нужно знать, что КАЖДЫЙ ресурс RSE привязан к профилю, и эти профили будут содержать: 1. Соединения, включая свойства подсистемы. 2. Фильтры, пулы фильтров и ссылки на пулы фильтров 3. Другие данные, связанные с профилем

Профили могут быть активными или неактивными. Remote System Explorer отображает все соединения из всех активных профилей и внутри соединения позволяет ссылаться на пулы фильтров из любого активного профиля.

Однако есть один ключевой момент: Ваш личный профиль нельзя удалить или сделать неактивным.

Это означает, что если вы не создали профиль группы, который можно отключить, И ваш подключаемый модуль RSE не реализует собственный уровень обслуживания для корректного отказа, И этот ресурс становится недоступным, вы не можете запустить профиль конфигурации - когда-либо - отсюда и ваша проблема.

Так что не беспокойтесь о переустановке плагина, который вы можете сделать (или найти лучший), просто убедитесь, что все удаленные ресурсы подключены к профилю команды конкретного проекта. Затем вы можете использовать представление «Группа», чтобы контролировать, какие профили отображаются в вашей рабочей области, делая различные профили активными или неактивными.

Вы можете узнать больше об этом в Руководство для разработчиков RSE

EDIT: последующие действия

К сожалению, похоже, что на самом деле это та же ошибка, с которой вы сталкивались раньше в другой цепочке вызовов. При настройке профиля команды вы не удалили/не удалили все компоненты подключаемого модуля RSE. Таким образом, декоратор пользовательского интерфейса попытался создать для вас представление вашего удаленного ресурса и получил нулевой указатель.

Это подтверждается тем фактом, что вы не могли «увидеть» плагин RSE в своем обнаружении затмения. По крайней мере, eclipse ведет себя так, как будто часть его все еще была там, и я подозреваю, что так оно и было.

В основном у вас есть два варианта решения этой проблемы, и ни один из них не очень счастлив.

  1. Если у вас нет ничего серьезного, заблокированного в вашей среде eclipse IDE, которую вы не можете извлечь (чего вам не следует делать), самым простым было бы удалить eclipse и все связанные с ним файлы, переустановить чистый eclipse , загрузите RSE, настройте профиль группы (два было бы лучше), не позволяя использовать идентификатор по умолчанию из вашего личного профиля, ЗАТЕМ повторно подключите удаленную систему.

  2. Если вам ДЕЙСТВИТЕЛЬНО хочется испачкать руки и исправить это с помощью существующей установки eclipse, вы можете напрямую написать код в реестр RSE FYI: (НЕ тривиально) и вы выиграли не сможете запустить его в Eclipse, когда вы это сделаете. Реестр позволяет вам получить почти всю информацию о параметрах конфигурации, подсистемах и профилях и управлять ими.

Если бы я торопился, я бы просто сделал 1. Если вы хотите найти время и узнать больше об RSE и не боитесь его сломать, я бы сделал 2.

Еще кое-что. Существует «теоретически» способ получить и изменить/сбросить ваш личный профиль в интерфейсе ISystemProfile RSE, есть два метода, которые МОГУТ сделать это, но просто чтобы вы знали, даже лучшие гуру eclipse, которых я знаю, не знать, если это возможно или будет работать, тем не менее вот информация:

isDefaultPrivate, чтобы найти уникальный профиль разработчика (возвращает логическое значение), а setDefaultPrivate может позволить вам деактивировать уникальный профиль разработчика и установить другой.

Почему я говорю «может», потому что даже в документации API eclipse это утверждение заканчивается знаком вопроса... см. здесь

person J-Boss    schedule 24.08.2013
comment
Спасибо Джей-Босс. Это был четкий информативный ответ, и он также попытался создать публичный профиль. Но он все равно вернул мне исключение нулевого указателя. Также получено другое исключение нулевого указателя. (Новое исключение нулевого указателя в вопросе) Я не знаю, что я здесь делаю неправильно. - person PythonEnthusiast; 25.08.2013
comment
Не могли бы вы указать мне, как исправить плагин rse, чтобы я попробовал его на новом eclipse kepler и повторил описанные выше шаги (я нигде не могу найти плагин rse сейчас?). Является ли он устаревшим. - person PythonEnthusiast; 25.08.2013
comment
Я понял, что не ответил на ваш второй вопрос, да, RSE немного устарел, но TM немного расширил его. Это сайт, на котором вы можете узнать больше. Это облегченная структура по сравнению с RSE, но она более отказоустойчива, что вы можете оценить прямо сейчас. - person J-Boss; 27.08.2013
comment
Не могли бы вы оказать мне удаленную помощь через join.me или Skype? Я на самом деле не могу понять и решить эту проблему самостоятельно, и мне очень нужно решить это сейчас. Спасибо. - person PythonEnthusiast; 28.08.2013

я нашел это в

http://www.eclipse.org/forums/index.php/t/171215/

Я уже понял проблему:

Посмотрев на детали, я вижу, что все идет не так, когда он пытается сохранить некоторые данные, связанные с подключением.

Я сторонник последовательности, поэтому я удалил папку Eclipse в Program Files. Я предполагаю, что у RSE не было соответствующих разрешений для записи туда, поэтому это просто не удалось. Папка Eclipse теперь на моем рабочем столе, и RSE отлично работает!

Теперь, почему, черт возьми, у Eclipse нет надлежащего установщика, чтобы он мог жить с остальными моими программами?! Прохладный

Я не знаю, поможет ли это.

person George Tomlinson    schedule 27.08.2013