Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX:Artifact仅显示空窗口_Java_Eclipse_Intellij Idea_Javafx - Fatal编程技术网

JavaFX:Artifact仅显示空窗口

JavaFX:Artifact仅显示空窗口,java,eclipse,intellij-idea,javafx,Java,Eclipse,Intellij Idea,Javafx,前言:我对JavaFX很陌生 制作了一个简单的图像大小调整应用程序,需要构建应用程序的工件。 使用IntelliJ和Eclipse(两者都尝试过),我构建了普通的JAR构件和JavaFX构件。两者都是可执行的,但只显示一个空窗口。 当从IDE启动应用程序时,没有问题;包含所有子平面的窗口将按其应有的方式显示 有没有办法解决这个问题?提前谢谢 附加的应用程序初始化部分的代码和生成的窗口的图片-可能会有所帮助 public class MainApp extends Application { p

前言:我对JavaFX很陌生

制作了一个简单的图像大小调整应用程序,需要构建应用程序的工件。 使用IntelliJ和Eclipse(两者都尝试过),我构建了普通的JAR构件和JavaFX构件。两者都是可执行的,但只显示一个空窗口。

当从IDE启动应用程序时,没有问题;包含所有子平面的窗口将按其应有的方式显示

有没有办法解决这个问题?提前谢谢

附加的应用程序初始化部分的代码和生成的窗口的图片-可能会有所帮助

public class MainApp extends Application {

private Stage primaryStage;
private BorderPane rootLayout;

private SettingsViewController settingController;
private MainViewController mainViewController;

@Override
public void start(Stage primaryStage) {
    this.primaryStage = primaryStage;
    this.primaryStage.setTitle("SimpleImageResizer");

    this.primaryStage.getIcons().add(new Image("file:icon.png"));

    this.primaryStage.setOnCloseRequest(we -> ConfigurationCache.getInstance().pushConfig());

    targetResolutions.addAll(Arrays.asList(ResolutionPreset.values()));
    supportedFileFormats.addAll(Arrays.asList(SupportedFileFormat.values()));

    initRootLayout();

    showMainView();
    showSettingsView();
    primaryStage.setResizable(false);
}

public void initRootLayout() {
    try {
        // Load root layout from fxml file.
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml"));
        rootLayout = loader.load();

        // Show the scene containing the root layout.
        Scene scene = new Scene(rootLayout);
        primaryStage.setScene(scene);
        primaryStage.show();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
.
.
.
public static void main(String[] args) {
    launch(args);
}


您没有提供足够的信息来解决您的问题,因此以下是一个有效的示例:

创建包应用程序并将此类放入其中:

application/Main.java

在包应用程序中创建“RootLayout.fxml”

应用程序/RootLayout.fxml


在Eclipse中选择

导出->运行JAR文件->将所需库提取到 生成罐

(当然,您需要指定正确的启动配置)

生成的JAR可以执行,并且具有来自fxml的节点

loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml"));
试一试

loader.setLocation(MainApp.class.getResource("/view/RootLayout.fxml"));

NetBeans第一个变体将无法在IDE中编译,我遇到了类似的问题。它在IDE中运行良好,但当我创建jar并尝试运行它时,无法加载fxml文件。下面是我的工作。你可以试着检查一下它是否得到了fxml文件

String fxml = "/com/test/fxmls/gui.fxml";
InputStream in = MycLass.class.getResourceAsStream(fxml);
if(in!=null){
FXMLLoader loader = new FXMLLoader();
loader.setBuilderFactory(new JavaFXBuilderFactory());
loader.setLocation(MycLass.class.getResource(fxml));
BorderPane rootLayout = (BorderPane)loader.load(in);
}else{
  //log or output the error
}

我认为不能从jar文件访问资源文件。因此,在本例中,您试图从jar加载fxml文件,这是不可能的。其他明智的做法是遵循@Roland建议的方法。

你能解压jar以确保fxml文件被复制并位于jar中的正确位置吗?我刚刚解压了jar-是的,似乎每个文件都位于各自的位置。如果你只提供一个完整的项目,这将很容易解决(当然是最低版本)。您是否在命令行中启动了应用程序以查看是否引发了任何异常?还没有看到,所以我问:您使用的是什么操作系统?您使用的是什么Java版本?(尝试使用Windows/Linux/Mac OSX(32或64位)和OpenJRE/JDK x86/x64或OracleJRE/JDK x86/x64等选项回答)。当然,您必须更改加载方法,使其在
getResource(“/view/RootLayout.fxml”)
字符串中的“/”与编译有什么关系?ups,不是compile just run。他的问题不是它在IDE中没有运行。他的问题是它没有作为JAR运行。
loader.setLocation(MainApp.class.getResource("/view/RootLayout.fxml"));
String fxml = "/com/test/fxmls/gui.fxml";
InputStream in = MycLass.class.getResourceAsStream(fxml);
if(in!=null){
FXMLLoader loader = new FXMLLoader();
loader.setBuilderFactory(new JavaFXBuilderFactory());
loader.setLocation(MycLass.class.getResource(fxml));
BorderPane rootLayout = (BorderPane)loader.load(in);
}else{
  //log or output the error
}