当前位置: 首页 > 知识库问答 >
问题:

图形用户界面不显示

阎建华
2023-03-14

所以我必须快速构建这个JavaFX应用程序,我的代码编译了,但是图形用户界面没有启动,我得到了异常。一旦实现FileChooser代码,问题就会开始。

public class Main extends Application {

    @FXML //  fx:id="openButton"
    private Button openButton; // Value injected by FXMLLoader

    @Override
    public void start(Stage primaryStage) throws Exception{

        Parent root = FXMLLoader.load(getClass().getResource("Plot.fxml"));

        openButton.setOnAction(new EventHandler<ActionEvent>(){
            @Override
            public void handle(ActionEvent arg0) {
                FileChooser fileChooser = new FileChooser();
                FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
                fileChooser.getExtensionFilters().add(extFilter);
                File file = fileChooser.showOpenDialog(primaryStage);
                System.out.println(file);
            }
        });

        primaryStage.setTitle("Plotter");
        primaryStage.setScene(new Scene(root, 1024 , 768));
        primaryStage.show();
    }


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

FXML文件如下所示:

<BorderPane prefHeight="400.0" prefWidth="723.0" xmlns="http://javafx.com/javafx/null" xmlns:fx="http://javafx.com/fxml/1">
   <top>
      <HBox alignment="TOP_CENTER" prefHeight="50.0" spacing="10.0" BorderPane.alignment="CENTER">
         <children>
            <Button fx:id="openButton" mnemonicParsing="false" prefHeight="31.0" prefWidth="150.0" text="Open Dataset" />
            <Button mnemonicParsing="false" prefHeight="31.0" prefWidth="150.0" text="Button" />
            <Button mnemonicParsing="false" prefHeight="31.0" prefWidth="150.0" text="Button" />
         </children>
         <padding>
            <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
         </padding>
         <BorderPane.margin>
            <Insets />
         </BorderPane.margin>
      </HBox>
   </top>
</BorderPane>

我完全是JavaFX的新手。任何提示都很感激。P. S.我正在使用胶粘场景生成器。

谢谢。

例外:

应用程序启动方法中的异常线程“main”java中的异常。lang.RuntimeException:com上应用程序启动方法中的异常。太阳javafx。应用发射装置impl。在com上启动Application1(LaunchImpl.java:917)。太阳javafx。应用发射装置impl。lambda$launchApplication$155(LaunchImpl.java:182)在java上。朗。丝线。运行(Thread.java:745)的原因是:java。样本处的lang.NullPointerException。主要的在com上启动(Main.java:29)。太阳javafx。应用发射装置impl。lambda$launchApplication1$162(launchimpl.java:863)位于com。太阳javafx。应用PlatformImpl。com上的lambda$runAndWait$175(platformpl.java:326)。太阳javafx。应用PlatformImpl。java上的lambda$null$173(platformpl.java:295)。安全访问控制器。com上的doPrivileged(本机方法)。太阳javafx。应用PlatformImpl。lambda$runLater$174(platformpl.java:294)位于com。太阳玻璃用户界面。invokelateDispatcher$Future。在com上运行(InvokeLaterDispatcher.java:95)。太阳玻璃用户界面。赢WinApplication_com上的runLoop(本机方法)。太阳玻璃用户界面。赢WinApplication。lambda$null$148(WinApplication.java:191)。。。还有一个

html" target="_blank">进程已完成,退出代码为1

共有1个答案

冯风史
2023-03-14

答案是将控制器和应用程序类分开,这样您就不会得到应用程序类的两个实例。否则,应用程序类的一个实例将不会初始化某些成员,并最终引发空指针异常。

package plot;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.stage.FileChooser;

import java.io.File;

public class Controller {

    @FXML //  fx:id="openButton"
    private Button openButton; // Value injected by FXMLLoader

    @FXML
    public void open(ActionEvent e) {
        FileChooser fileChooser = new FileChooser();
        FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
        fileChooser.getExtensionFilters().add(extFilter);
        File file = fileChooser.showOpenDialog(openButton.getScene().getWindow());
        System.out.println(file);
    }

}
package plot;

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

public class Main extends Application {

    @Override
    public void start(Stage stage) throws Exception{
        FXMLLoader loader = new FXMLLoader(getClass().getResource("Plot.fxml"));
        Parent root = loader.load();

        stage.setTitle("Plotter");
        stage.setScene(new Scene(root, 1024 , 768));
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.Button?>
<?import javafx.geometry.Insets?>
<BorderPane prefHeight="400.0" prefWidth="723.0" xmlns="http://javafx.com/javafx/null"
            xmlns:fx="http://javafx.com/fxml/1"
            fx:controller="plot.Controller"
>
  <top>
    <HBox alignment="TOP_CENTER" prefHeight="50.0" spacing="10.0" BorderPane.alignment="CENTER">
      <children>
        <Button fx:id="openButton" mnemonicParsing="false" prefHeight="31.0" prefWidth="150.0" text="Open Dataset" onAction="#open"/>
        <Button mnemonicParsing="false" prefHeight="31.0" prefWidth="150.0" text="Button"/>
        <Button mnemonicParsing="false" prefHeight="31.0" prefWidth="150.0" text="Button"/>
      </children>
      <padding>
        <Insets bottom="10.0" left="10.0" right="10.0" top="10.0"/>
      </padding>
      <BorderPane.margin>
        <Insets/>
      </BorderPane.margin>
    </HBox>
  </top>
</BorderPane>

请参阅相关内容(我建议研究第一个链接以了解此解决方案的工作原理)。

  • Javafx-应用程序类可以是控制器类吗
  • 什么是空指针异常,如何修复它?
 类似资料:
  • 本节介绍如何创建Python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口。 目前支持Python的所谓"GUI工具包"有很多,但没有一个被认为是标准的,也好,选择空间大 GUI工具包: 工具包名 介绍 URL地址 Tkinter 使用Tk平台。很容易得到。半标准 http://wiki.python.org/moin/TkInter wxpython 基于wxWindows。跨平

  • 8.1 图形用户界面概述

  • 第 8 章 图形用户界面 随着 Windows 之类的图形化操作系统的产生和发展,如今用户在与计算机打交道时基本 上都使用形象直观、简单易学的图形化方式,即通过鼠标点击菜单、命令按钮等图形化元素 来向应用程序发出命令,而应用程序也以消息框、对话框等图形化元素来向用户显示各种信 息。因此,为程序建立图形化的用户界面已经成为当今程序设计必备的基本技术之一。本章 介绍图形用户界面的设计和实现,具体内容包

  • UnityGUI is the GUI creation system built into Unity. It consists of creating different Controls, and defining the content and appearance of those controls. Unity图形用户界面是固化在Unity中的图形用户界面系统。它含有创建不同控件和定义

  • 为了使用Rexx中提供的图形用户界面,需要使用2个包,一个称为ActiveTcl ,另一个称为Rexxtk包。 除了这两个包之外,还可以设计普通表单,这些表单可以在表单上有按钮和其他控件。 环境设置 (Environment Setup) 首先要做的是环境设置。 让我们通过以下步骤来确定环境。 Step 1 - 从以下网站下载Activetcl软件包 - https://www.activesta

  • 基本概念 界面设计人员经常把UI、GUI等词汇挂载嘴边,那么到底什么是GUI?另外你可能还听说过HUD,HUD又是什么? 首先上结论:UI > GUI > HUD UI UI是User Interface的缩写,也是User Interaction的缩写。UI涵盖一切用户和机器交互的内容,如果把计算机程序抽象为“输入-处理-输出”这个过程,那么UI负责的就是“输入”和“输出”。 用户交互包含了用户