我知道“阻止访问”应该是什么意思:你正在使用内部库,不在公共API中的东西,而你根本就不应该使用它。
现在,据我所知,包“org.eclipse.osgi.util”中的类EclipseStarter是公共API的一部分。我引用:
This package specifies API to start the platform.
Clients may use the EclipseStarter loader class to start the platform.
The EclipseStarter class is the only defined API in this package.
EclipseStarter类的详细信息页面指出:
Special startup class for the Eclipse Platform. This class cannot be instantiated;
all functionality is provided by static methods.
Note that the fields on this class are not API.
我读过:方法可以使用吗?
我的代码:
import org.eclipse.core.runtime.adaptor.EclipseStarter;
这个已经发出警告“不鼓励访问:由于对所需库的限制而无法访问类型EclipseStarter [path-to-eclipse] \ plugins \ org.eclipse.osgi_3.7.2.v20120110-1415.jar”< / p>
我使用该类的代码:
try {
EclipseStarter.shutdown();
EclipseStarter.startup(null, null);
} catch (Exception e) {
e.printStackTrace();
}
警告:不鼓励访问:由于对所需库[path-to-eclipse] \ plugins \ org.eclipse.osgi_3.7.2.v20120110-1415.jar
的限制,EclipseStarter类型无法访问警告:不鼓励访问:由于对所需库[path-to-eclipse] \ plugins \ org.eclipse.osgi_3.7.2.v20120110-1415.jar的限制 警告:不鼓励访问:由于对所需库[path-to-eclipse] \ plugins \ org.eclipse.osgi_3.7.2.v20120110的限制,无法访问EclipseStarter类型的方法startup(String [],Runnable) -1415.jar 我知道,我现在正在使用null值调用启动方法,这可能不起作用但我现在只是编写代码 - 还没有运行。我不喜欢这些警告。要么我完全错了(EclipseStarter不公开),我配置中的某些内容都是错误的...... 我尝试调整类路径,以便插件依赖性首先出现(在内部JRE之前),但这也不起作用。这些警告所讨论的库是在依赖项中,而不是在我的JRE中。我不知道还能尝试什么。 无论哪种方式,底线我实际上是在寻找一种以编程方式重启Eclipse的好方法。插件代码首先安装一些额外的插件(没有警告,用户也必须接受所有这些插件的许可协议),然后应该重新启动。到目前为止我一直在使用 任何能指出正确方向的人?谢谢! 修改: 编辑2:我很确定上面的错误发生了,因为这段代码错了。我如何编写performFinish代码以便不会发生该错误?使用 编辑3:好吧,我将performFinish代码更改为使用 这个回复50次,显然,当Widget被处理掉时,他仍然试图执行某些事情。 这是新的 只是为了完成:现在一切正常。还有另一个类(一个帮助器类),在访问它之前我没有检查Text-widget是否被处理掉了。一旦解决了这一切,它就会成为一种魅力。感谢greg-449!PlatformUI.getWorkbench().restart();
,但是在重新启动日志时会出现错误(“事件循环”或其他内容)。
PlatformUI.getWorkbench().restart()
给我的错误如下:eclipse.buildId=M20120208-0800
java.version=1.6.0_43
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=nl_BE
Framework arguments: -product org.eclipse.epp.package.rcp.product
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product
org.eclipse.epp.package.rcp.product
Error
Thu Nov 07 12:34:11 CET 2013
Unhandled event loop exception
org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:4282)
at org.eclipse.swt.SWT.error(SWT.java:4197)
at org.eclipse.swt.SWT.error(SWT.java:4168)
at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
at org.eclipse.swt.widgets.Tree.getItems(Tree.java:3249)
at org.eclipse.jface.viewers.TreeViewer.getChildren(TreeViewer.java:171)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalCollectExpandedItems(AbstractTreeViewer.java:1588)
at org.eclipse.jface.viewers.AbstractTreeViewer.getExpandedElements(AbstractTreeViewer.java:1180)
at org.eclipse.ui.internal.dialogs.NewWizardNewPage.storeExpandedCategories(NewWizardNewPage.java:626)
at org.eclipse.ui.internal.dialogs.NewWizardNewPage.saveWidgetValues(NewWizardNewPage.java:544)
at org.eclipse.ui.internal.dialogs.NewWizardSelectionPage.saveWidgetValues(NewWizardSelectionPage.java:99)
at org.eclipse.ui.internal.dialogs.NewWizard.performFinish(NewWizard.java:128)
at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:831)
at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:432)
at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
at org.eclipse.jface.window.Window.open(Window.java:801)
at org.eclipse.ui.internal.handlers.WizardHandler$New.executeHandler(WizardHandler.java:257)
at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:277)
at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169)
at org.eclipse.ui.internal.handlers.SlaveHandlerService.executeCommand(SlaveHandlerService.java:241)
at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:157)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
asyncExec
?@Override
public final boolean performFinish() {
if (getContainer().getCurrentPage().equals(myLastPage)) {
PlatformUI.getWorkbench().restart();
return true;
} else {
return false;
}
}
asyncExec
,但现在我收到此错误:!ENTRY org.eclipse.ui 4 0 2013-11-07 13:56:21.380
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTException: Widget is disposed)
at org.eclipse.swt.SWT.error(SWT.java:4282)
at org.eclipse.swt.SWT.error(SWT.java:4197)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:138)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4140)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3757)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Caused by: org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:4282)
at org.eclipse.swt.SWT.error(SWT.java:4197)
at org.eclipse.swt.SWT.error(SWT.java:4168)
at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
at org.eclipse.swt.widgets.Text.setText(Text.java:1966)
at helper.CustomProgressMonitor$1.run(CustomProgressMonitor.java:64)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135)
... 23 more
performFinish
代码:@Override
public final boolean performFinish() {
if (getContainer().getCurrentPage().equals(myLastPage)) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
PlatformUI.getWorkbench().restart();
}
});
return true;
} else {
return false;
}
}
答案 0 :(得分:5)
PlatformUI.getWorkbench().restart();
是重启的正确方法(除非您运行的是纯'e4'RCP)。您需要查看导致事件循环错误的原因。
包含EclipseStarter
的包在org.eclipse.osgi
MANIFEST.MF
中标有x-friends="org.eclipse.core.runtime"
,这意味着它仅供org.eclipse.core.runtime
和所有其他插件使用将得到气馁的访问警告。