首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在导出的jar文件中添加fxml文件

在导出的jar文件中添加fxml文件
EN

Stack Overflow用户
提问于 2017-10-10 15:19:53
回答 2查看 1.1K关注 0票数 2

我正在尝试从我在ideallij中创建的javafx项目导出一个jar文件。通过在输出中添加所有jar库,我为工件做了属性。然后,我构建工件并创建jar文件。但是,当我试图使用java - jar name.jar从终端运行jar时,我收到以下错误:

应用程序启动方法中的异常,java.lang.reflect.InvocationTargetException

fxml文件中的错误点。如何在压缩的jar文件中添加fxml文件?

FXML加载:

代码语言:javascript
复制
public void start(Stage primaryStage) throws Exception {

    FXMLLoader fxmlLoader = new FXMLLoader(EchoClient.class.getResource("name.fxml"));
    Parent p = fxmlLoader.load();
    Scene scene = new Scene(p);
    primaryStage.setScene( scene );
    primaryStage.setTitle("FX Echo Client");
    primaryStage.setWidth( 320 );
    primaryStage.setHeight(568);
    primaryStage.show();
}

该错误位于Parent p = fxmlLoader.load();.The中,接收的错误如下:

编辑:,经过一番研究,我得出结论,我的问题与following post有关。因此,我从fx:controller文件中删除了属性,而jar通常在没有应用程序功能的情况下被调用。我是如何将控制器功能添加到代码中的?

我的fxml文件如下:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="services.EchoClientController">
    <children>
        <VBox spacing="10.0" VBox.vgrow="SOMETIMES">
            <children>
                <Label text="Host" />
                <TextField fx:id="tfHost" text="localhost" />
                <Label text="Port" />
                <TextField fx:id="tfPort" text="10000" />
                <HBox spacing="4.0">
                    <children>
                        <Button fx:id="btnConnect" mnemonicParsing="false" onAction="#connect" text="Connect" />
                        <Button fx:id="btnDisconnect" mnemonicParsing="false" onAction="#disconnect" text="Disconnect" />
                    </children>
                </HBox>
            </children>
            <VBox.margin>
                <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
            </VBox.margin>
        </VBox>
        <Separator prefWidth="200.0" />
        <VBox spacing="10.0" VBox.vgrow="ALWAYS">
            <children>
                <Label text="Message To Send" />
                <TextField fx:id="tfSend" />
                <Button fx:id="btnSend" mnemonicParsing="false" onAction="#send" text="Send" />
                <Label text="Message Received" />
                <TextField fx:id="tfReceive" editable="false" />
            </children>
            <VBox.margin>
                <Insets bottom="20.0" left="20.0" right="20.0" top="20.0" />
            </VBox.margin>
        </VBox>
        <Separator prefWidth="200.0" />
        <VBox VBox.vgrow="NEVER">
            <VBox.margin>
                <Insets bottom="10.0" left="20.0" right="20.0" top="10.0" />
            </VBox.margin>
            <children>
                <HBox fx:id="hboxStatus" spacing="10.0">
                    <children>
                        <ProgressBar fx:id="piStatus" prefWidth="150.0" progress="0.0" />
                        <Label fx:id="lblStatus" text="Label" />
                    </children>
                </HBox>
            </children>
        </VBox>
    </children>
</VBox>

EN

回答 2

Stack Overflow用户

发布于 2017-10-10 15:34:09

当.fxml文件中有一个错误时,我通常会收到这个错误。我认为文件本身流向了.jar文件,其中只有一些无法解决的问题。您可以通过删除大部分fxml内容临时(确保Java代码不会引用任何缺少的GUI元素)来查看错误是否消失。

票数 3
EN

Stack Overflow用户

发布于 2017-10-12 19:52:49

错误只能来自services.EchoClientController,缺少:

代码语言:javascript
复制
@FXML
private void connect() {
}

@FXML
private void disconnect() {
}

@FXML
private void send() {
}

由于不能这么简单,请查看构造函数并考虑使用:

代码语言:javascript
复制
@Override
public void initialize(URL url, ResourceBundle rb) {
    // Maybe constructor code here.
}    

而不是

代码语言:javascript
复制
FXMLLoader fxmlLoader = 
        new FXMLLoader(EchoClient.class.getResource("name.fxml"));
Parent p = fxmlLoader.load();

我做了(不应该起作用的事)

代码语言:javascript
复制
Parent p = FXMLLoader.load(EchoClient.class.getResource("name.fxml"));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46670377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档