JavaFX应用图标无法显示9/10次

时间:2016-07-03 17:46:02

标签: java image javafx icons stage

我有一个应用程序打开绝对正常,但我没有设置它的图标。我给出路径的图标就在那里,并且在该目录中更改为另一个想象显示图标9/10次,但此图像从未显示。它的地方总有一个问号。所以即使是另一个我知道会起作用的文件(即没有被破坏),为什么它只显示这么少?

以下是MyApplication.java的代码

package MyApp;

import MyApp.Variables.Constants;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Forms/FormMain.fxml"));

        primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/img/appicon.png")));
        primaryStage.setTitle("MyApp " + Constants.VERSION_NAME + " (" + Constants.RELEASE_ID + ")"); 
        primaryStage.setScene(new Scene(root, 1000, 800));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

以下是关于/ img / to Main.java的项目目录结构:

Directory structure

我已经尝试了所有解决方案here,但没有解决我的问题。

在Ubuntu 16.04上运行IDE的intelliJ IDEA,尽管导出的JAR文件仍然存在问题。

1 个答案:

答案 0 :(得分:3)

从磁盘加载数据非常耗时,因此您可以在构造对象时开始加载图标。将它放在构造函数中并将其保存在实例成员中。通常,您需要添加多个图标,因为每个平台都需要自己的大小(对于链接等)。

package MyApp;

import MyApp.Variables.Constants;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

public class Main extends Application {

    private Image icon;

    public Main() {
      icon = new Image(Main.class.getResource("/img/appicon.png").toExternalForm());
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("Forms/FormMain.fxml"));

        primaryStage.getIcons().add(icon);
        primaryStage.setTitle("MyApp " + Constants.VERSION_NAME + " (" + Constants.RELEASE_ID + ")"); 
        primaryStage.setScene(new Scene(root, 1000, 800));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

我的图标是:enter image description here Netbeans中的应用程序结构如下:

enter image description here

正在运行的应用程序看起来像这样:

enter image description here