无法在 Eclipse 中创建新的 FXML 文件

问题描述 投票:0回答:4

当我尝试在 Eclipse 中创建一个新的 FXML 文件时(文件 -> 新建 -> 其他 -> JavaFX - 新的 FXML 文档 -> 下一步)没有任何反应。它不创建文件。当我尝试创建 FXGraph 或 JavaFX HTML 模板时出现同样的问题,无论它们是什么。在我尝试创建之后,我收到了这个错误消息:


eclipse.buildId=4.26.0.20221201-1200
java.version=17.0.5
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE
Framework arguments:  -product org.eclipse.epp.package.java.product
Command-line arguments:  -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product

org.eclipse.ui
Error
Sun Dec 11 06:12:31 CET 2022
Unhandled event loop exception

java.lang.NoClassDefFoundError: org/eclipse/jface/databinding/swt/WidgetProperties
    at org.eclipse.fx.ide.ui.wizards.AbstractJDTElementPage.createControl(AbstractJDTElementPage.java:109)
    at org.eclipse.jface.wizard.Wizard.createPageControls(Wizard.java:178)
    at org.eclipse.jface.wizard.WizardDialog.createPageControls(WizardDialog.java:744)
    at org.eclipse.jface.wizard.WizardDialog.setWizard(WizardDialog.java:1182)
    at org.eclipse.jface.wizard.WizardDialog.updateForPage(WizardDialog.java:1235)
    at org.eclipse.jface.wizard.WizardDialog.lambda$3(WizardDialog.java:1223)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
    at org.eclipse.jface.wizard.WizardDialog.showPage(WizardDialog.java:1223)
    at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:918)
    at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:469)
    at org.eclipse.jface.dialogs.Dialog.lambda$0(Dialog.java:619)
    at org.eclipse.swt.events.SelectionListener$1.widgetSelected(SelectionListener.java:84)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:252)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4054)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3642)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:823)
    at org.eclipse.jface.window.Window.open(Window.java:799)
    at org.eclipse.ui.internal.handlers.WizardHandler$New.executeHandler(WizardHandler.java:263)
    at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:283)
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283)
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:97)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:317)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:251)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:485)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
    at org.eclipse.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:389)
    at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:142)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:580)
    at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:414)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4054)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3642)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
    at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1440)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jface.databinding.swt.WidgetProperties cannot be found by org.eclipse.fx.ide.ui_3.8.0.202204150904
    ... 67 more

我尝试重新安装 JavaFX 和 SceneBuilder,但没有任何改变。 重新安装 Eclipse 软件也无济于事。

eclipse javafx fxml
4个回答
5
投票

看起来 e(fx)clipse 没有为 2022-12 更新,removed 一些 DataBinding APIs.

您可以在 https://github.com/eclipse-efx/efxclipse-eclipse/issues 上提出一个问题,但是如果您可以提出一个 pull request 来修复它,那可能会使事情进展得更快.


3
投票

我找到了解决这个问题的方法。

  1. 创建一个新的 JavaFX 项目 Eclipse Project Creation Wizard Selection Screen
  2. 将 FXMLDocument 重命名为唯一的名称 JavaFX Project Navigator Display
  3. 右键单击并从您刚刚创建的虚假项目中复制 .FXML 文件
  4. 在你的真实项目中右击,将.FXML文件粘贴到实际项目中 New .FXML file is in the original JavaFX Project
  5. 删除伪造的 JavaFX Project 进行清理
  6. 明智地点头并拍拍自己的后背

2
投票

我有同样的问题,那是因为我使用的是eclipse 12-2022。只需将其降级为 eclispe 09-2022。


1
投票

我发现让 SceneBuilder 工作的解决方案是:

  • 创建一个通用文件,但用 .fxml 命名它
  • 转到 Window->Preferences->JavaFX 并在 SceneBuilder 可执行框中粘贴计算机上 scenebuilder 可执行文件的路径
  • 右键单击新创建的.fxml文件->用scenebuilder打开

这是 2022-12 版本

© www.soinside.com 2019 - 2024. All rights reserved.