我正在使用Scene Builder 2.0和Eclipse Luna。 在fxml文件中,我具有带有图像的场景代码。 如果我在日食上进行测试,那么一切都很好,但是如果我将其导出到可运行的jar中,然后运行它,则我的窗口没有图像...这是代码的一部分:

<ImageView layoutX="63.0" layoutY="14.0">
                     <image>
                        <Image url="@../Images/MainPage/O.png" />
                     </image>
                  </ImageView>

文件结构:

Graph:
    MainPage:
        MainPage.fxml
    Images:
        MainPage:
            O.png

我认为问题出在路径上,但我不知道如何走这条路。 加载程序代码:

public class ScreensController extends StackPane{

    private HashMap<String, Node> screens = new HashMap<>();

    public ScreensController() {
        super();
    }

    public void addScreen(String name, Node screen){
        System.out.println("name: "+name);
        System.out.println("screen: "+name);
        screens.put(name, screen);
    }

    public Node getScreen(String name){
        return screens.get(name);
    }

    //name - nazwa Screenu
    //rescue - nazwa pliku FXML
    public boolean loadScreen(String name, String rescue){
        try {
            System.out.println("loading Screen "+name+" path: "+rescue);
            System.out.println("0001");
            FXMLLoader myLoader= new FXMLLoader(getClass().getResource(rescue));
            System.out.println("0002");
            Parent loadScreeen = (Parent) myLoader.load();
            System.out.println("0003");
            ScreenControlled myScreenControler = ((ScreenControlled) myLoader.getController());
            System.out.println("0004");
            myScreenControler.setScreenParent(this);
            System.out.println("0005");
            addScreen(name, loadScreeen);//Dodanie do HashMap
            System.out.println("0006");
            return true;
        } catch (IOException e) {
            System.out.println("IOException Error in ScreenController: "+e.getMessage().substring(1,e.getMessage().length())
                    +"\n Cause: "+e.getCause()
                    +"\n Localized Message: "+e.getLocalizedMessage().substring(1,e.getLocalizedMessage().length())
                    +"\n Class: "+e.getClass()
                    +"\n ST: ");
            e.printStackTrace();
            return false;
        }
    }

    public boolean setScreen(final String name){
        System.out.println("Setting Screen: "+name);
        if(screens.get(name) != null) { //screen loaded
            final DoubleProperty opacity = opacityProperty();

            if(!getChildren().isEmpty()) { //if there is more than one screen
                Timeline fade = new Timeline(
                    new KeyFrame(Duration.ZERO, new KeyValue(opacity, 1.0)),
                    new KeyFrame(new Duration(1000), new EventHandler<ActionEvent>(){

                        @Override
                        public void handle(ActionEvent t){
                            getChildren().remove(0); //remove the displayed screen
                            getChildren().add(0, screens.get(name)); //add the screen
                            Timeline fadeIn = new Timeline(
                                    new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
                                    new KeyFrame(new Duration(800), new KeyValue(opacity, 1.0)));
                            fadeIn.play();
                        }
                    }, new KeyValue(opacity, 0.0)));
                    fade.play();
                }else{
                    setOpacity(0.0);
                    getChildren().add(screens.get(name)); //no one else been displayed, then just show
                    Timeline fadeIn = new Timeline(
                            new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
                            new KeyFrame(new Duration(1000), new KeyValue(opacity, 1.0)));
                    fadeIn.play();
                }
            return true;
            }else{
                System.out.println("screen hasn't been loaded!!!\n");
                return false;
        }
    }

    public boolean unloadSCreen(String name) {
        if(screens.remove(name)==null) {
            System.out.println("Screen " +name+ " didn't exist");
            return false;
        }else{
            return true;
        }
    }
}

初始化函数:

public void start(Stage stage) throws Exception {

        new Fonts().initialize();

        this.stage=stage;
        ScreensController mainContainer = new ScreensController();
        mainContainer.loadScreen(ScreensFramework.screen2ID,  ScreensFramework.screen2File);

        mainContainer.setScreen(ScreensFramework.screen2ID);

        root = new StackPane();//Group root = new Group();
        root.getChildren().addAll(mainContainer);
        Scene scene = new Scene(root);
        this.stage.setScene(scene);
        this.stage.show();
}

===============>>#1 票数:0

您在路径的开头缺少/ 请用 :

FXMLLoader myLoader= new FXMLLoader(getClass()
 .getResource(/com/gmail/Slupik98/Project_Stangar/Graph/MainPage/MainPage.fxml));

  ask by Sebastian W. translate from so

未解决问题?本站智能推荐:

1回复

某些图像未加载相对路径-JavaFX

我正在开发一个便携式桌面应用程序,并且UI使用某些图像。 我的应用程序的绝对路径是:C:/ Users / JP / Documents / EOL / Collection / DataCollection / src / application / 我在应用程序文件夹(上面已指定)中
2回复

JavaFX加载异常

我正在尝试使用JavaFX制作一个基本的计算器应用程序,但是在启动该应用程序时遇到了麻烦。 这是我得到的错误 这就是我的包裹设置方式。 我的Calculator.java 我的CalculatorScreenController.java 我知道我还没有编写
1回复

我的jar文件无法加载通过场景构建器添加的图像。 (JAVAFX)

所以问题如下: 我创建了一个FXML文件,并使用JAVA SCENE BUILDER对其进行了编辑。 在场景生成器上,我添加了图像视图并设置了文件的路径 场景构建者路径 fxml文件中的代码是: 现在我有一个加载该FXML文件的主类。 图像在src文件中。
1回复

JavaFX异常加载FXML文件

我一直在开发需要使用JavaFX的桌面应用程序。 我已经在使用Scene Builder构建的Eclipse上的JavaFX项目中创建了各种FXML文件。 除了加载这个讨厌的文件(FXMLImgList.fxml)外,我加载任何FXML文件都没有问题。 主要思想是,当按下按钮时,会出现
1回复

JavaFX无法加载FXML

我在将FXML文件登录名输入JavaFX应用程序时遇到问题。 有人可以告诉我我在做什么错吗? 我对Swing的JavaFX非常陌生,所以请原谅,如果它确实不好或不正确的话。 这是fXML文件
1回复

在javafx中加载多个fxml

我一直在寻找一段时间,但我无法得到我想做的事情。 我一直在使用javafx框架在javafx中切换fxml,在这个帖子' 在同一场景中加载新的fxml '取得了一些成功。 我的意思是,我有一个主窗口,这个窗口有两个不同的区域,MAIN区域和CONTENT区域。 MAIN区域在整个应用程
1回复

Javafx动态加载ComboBox

我正在尝试根据Dan Nicks对这个问题的评论提出一个定制的构建器。 这个想法是在构造组合数据之前先设置它。 fxml文件: 提供数据的类: 和测试: 没有产生错误,但是没有填充组合。 什么东西少了 ? 顺便说一句:一个类似的解决方案,可以很好地工作:
1回复

JavaFX-无法从FXML文件加载节点

这个问题已经在这里有了答案: JavaFX控制器类不起作用 1回答 由于某种原因,我无法将FXML文件中定义的节点加载到我的实例变量中。 我已经制作了这两个测试文件: Test.java: FXML文件: 当应该使用FXML文件中定义的节点注
2回复

FFX阶段加载时的JavaFX 8问题

我正在尝试在JavaFX 8中作为阶段加载FXML文件。这是我更新的代码 我的FXML文件的完整补丁是 包裹名字 我在我的FXML文件中添加了fx:controller,现在出现空指针错误。 完整的错误跟踪。
2回复

JavaFx将其他FXML加载到FXML“模板”中

我需要创建许多不同的FXML文件,并且每个文件都具有一致的布局。 每个都将具有一个AnchorPane,它将保存单独的内容。 有没有办法加载“基本” FXML文件,然后加载第二个FXML文件,并将该数据路由到第一个文件中? 例如,FXML#1具有BorderPane。 FXML#