一段时间后无法打开FXML

问题描述 投票:9回答:8

我的JavaFX Scene Builder v2.0-b14有问题。

FXML有时无法打开。即使我删除除了root之外的FXML中的所有内容。 在任务栏中,它看起来像这样:

如果我重命名文件,我可以正常打开FXML。

有没有人知道/有这个问题,或者知道SceneBuilder缓存这些东西的位置?

问候, 卡拉什

javafx-8 fxml scenebuilder
8个回答
29
投票

虽然很久以前就已经提出了这个问题并且它已经得到了一个可接受的答案,但我想为这个问题贡献我的解决方案,因为它与其他解决方案不同,而且非常简单。

这个特殊的问题发生在我几分钟之前,我所要解决的是:

Windows XP / 7

  • 打开Windows Taskmanager
  • 切换到应用程序选项卡
  • 右键单击SceneBuilder(名为:yourFileName.fxml)
  • 选择'最大化'

Windows 8+

  • 打开Windows Taskmanager
  • 切换到进程选项卡
  • 单击JavaFX Scene Builder x.x.exe的dropbown
  • 找到未打开的FXML文件
  • 右键单击>按最大化

上述说明适用于Windows操作系统,在其他操作系统上,相应的应用程序管理程序也应该这样做。

这对我来说非常完美。无需复制和/或覆盖。


4
投票

一个简单的解决方法是:

  • 在其他地方复制fxml
  • 打开它
  • 将它保存到原始位置(覆盖旧)

这只是一种解决方法,但有效。 如果找到其他更好的解决方案,那就太好了。


2
投票

所以试试这个:将你的fxml文件复制到其他地方。打开JavaFx场景构建器并创建场景(一些非常简单'即使只有锚窗格和一个标签或其他东西)并保存在项目中的fxml位置。现在尝试通过双击打开它。如果是,只需从原始文件中复制xml并替换刚刚创建的xml。


0
投票

我有同样的问题,这就是我如何设法解决它。

  1. 打开JavaFX Scene Builder。
  2. 将文件从Eclipse(或Netbeans)拖放到Scene Builder中。
  3. 编辑您打开的场景。
  4. 现在,单击文件 - >另存为... - >选择Filter Box.fxml文件的位置并覆盖它。
  5. 现在,您只需双击该文件即可在Netbeans中打开* .fxml文件

0
投票

我在使用Netbeans时多次尝试使用Netbeans,有时当它在Netbeans编辑器中打开时,它在根元素中添加了额外的命名空间声明。

EG

<AnchorPane xmlns:fx="http://javafx.com/fxml/1" id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1">
    <children>

    </children>
</AnchorPane>

删除命名空间的第二个实例允许每次都可以再次正确打开和加载它。


0
投票

正如卡拉什尼所说:

一个简单的解决方法是:

copy the fxml in some other place
open it
save it to the original place(overwrite old)

在胜利8.1和胜利7上工作正常,但是你失去了相对于CSS的相对路径等等......

并且好像洛普说:

Opening the Windows Taskmanager
Switch to the applications tab
Right click the SceneBuilder (named: yourFileName.fxml)
Select 'Maximize'

适用于Win8.1和7 ...没有其他副作用:) wishi可以评论这个,但没有足够的声誉......


0
投票

最好的方法是:

  1. 从桌面打开Scene Builder
  2. 转到文件 - >打开最近
  3. 单击“清除菜单”

0
投票

谢谢你,ifloop和Dean Meehan。你帮我找到了我的解决方案:

private Stage stage;
private Preferences prefs = Preferences.userNodeForPackage(getClass());

@Override
public void start(Stage stage) throws Exception {
    this.stage = stage;

...

    double x = prefs.getDouble("X", 0);
    double y = prefs.getDouble("Y", 0);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

// The following four lines of code return the application to the screen.
    if(x<0 || x>screenSize.getWidth())
        x = 0;

    if(y<0 || y>screenSize.getHeight())
        y = 0;

    stage.setX(x);
    stage.setY(y);

...

    stage.show();
}

@Override
public void stop() throws Exception {

...

    double x = stage.getX();
    double y = stage.getY();

// if the window has been minimized, you will get x = -32000.0 and y=-32000.0
    if(x>=0)
        prefs.putDouble("X", x);
    if(y>=0)
        prefs.putDouble("Y", y);
}
© www.soinside.com 2019 - 2024. All rights reserved.