错误:无法初始化主类 FileChooser_1 原因:java.lang.NoClassDefFoundError:Stage

发布于 2025-01-10 18:29:46 字数 1437 浏览 0 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

盗琴音 2025-01-17 18:29:46

只要注意一些细节,您的代码就可以工作。特别是,尤其是刚开始时,

  • 使用 Java 命名约定.

  • 使用有意义的名称;例如,尝试使用 Button openButton,而不是 Button b

  • 使用详细注释时,请使其保持最新状态;请注意有意义的名称如何使一些注释变得多余。

  • 使用常量以保持一致性。

  • 正如 @jewelsea 所说,您的程序导入 java.beans.EventHandler;它应该导入 javafx.event.EventHandler.

  • 正如 @jewelsea 所说,“仅导入您使用的类。”

  • 让布局来完成工作。

  • 我无法解释你问题中的错误;我看到与 EventHandlerimport 不正确相关的错误。如果您使用的是 IDE,它可能会报告来自不同编译单元的错误。如有疑问,请进行全新构建,将代码移至新文件,或移至不同的开发环境,例如命令行。作为一个具体的例子,这个简单的 VersionCheck 说明了一个最小的 ant脚本,调用为 ant run,以及一个简单的 shell 脚本,调用为.run.sh

    <前><代码> #!/bin/sh
    JFX =“--模块路径/Users/Shared/javafx-sdk-17.0.1/lib --add-modules所有模块路径”
    javac $JFX *.java && java $JFX 版本检查

image

import javafx.event.EventHandler;
import java.io.File;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class FileChooser1 extends Application {

    private static final int PADDING = 32;

    @Override
    public void start(Stage stage) {
        // title
        stage.setTitle("FileChooser");
        //File chooser create
        FileChooser fileChooser = new FileChooser();
        // define Label
        Label label = new Label("Select a file to open or save:");
        // open Button
        Button openButton = new Button("Open");
        // open Event Handler
        EventHandler<ActionEvent> openHandler = new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                // get file name
                File file = fileChooser.showOpenDialog(stage);
                if (file != null) {
                    label.setText(file.getName() + " selected");
                }
            }
        };
        openButton.setOnAction(openHandler);
        // create save button
        Button saveButton = new Button("Save");
        // save Event Handler
        EventHandler<ActionEvent> saveHandler = new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                // save file
                File file = fileChooser.showSaveDialog(stage);
                if (file != null) {
                    label.setText(file.getName() + " selected");
                }
            }
        };
        saveButton.setOnAction(saveHandler);
        // VBox
        VBox vBox = new VBox(PADDING, label, openButton, saveButton);
        // set Alignment
        vBox.setAlignment(Pos.CENTER);
        vBox.setPadding(new Insets(PADDING));
        // create scene
        Scene scene = new Scene(vBox);
        // scene
        stage.setScene(scene);
        stage.show();
    }

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

With some attention to detail, your code works. In particular, especially when just starting out,

  • Use Java naming conventions.

  • Use meaningful names; for example, instead of Button b, try Button openButton.

  • When using detailed comments, keep them up to date; note how meaningful names make some comments superfluous.

  • Use constants for consistency.

  • As @jewelsea notes, your program imports java.beans.EventHandler; it should import javafx.event.EventHandler.

  • As @jewelsea notes, "Only import classes you use."

  • Let the layout do the work.

  • I can't explain the error in your question; I see errors related to the incorrect import for EventHandler. If you're using an IDE, it may be reporting errors from a different compilation unit. When in doubt, do a clean build, move the code to a new file, or move to a different development environment, e.g. the command line. As a concrete example, this simple VersionCheck illustrates both a minimal ant script, invoked as ant run, and a simple shell script, invoked as .run.sh:

      #!/bin/sh
      JFX="--module-path /Users/Shared/javafx-sdk-17.0.1/lib --add-modules ALL-MODULE-PATH"
      javac $JFX *.java && java $JFX VersionCheck
    

image

import javafx.event.EventHandler;
import java.io.File;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.*;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class FileChooser1 extends Application {

    private static final int PADDING = 32;

    @Override
    public void start(Stage stage) {
        // title
        stage.setTitle("FileChooser");
        //File chooser create
        FileChooser fileChooser = new FileChooser();
        // define Label
        Label label = new Label("Select a file to open or save:");
        // open Button
        Button openButton = new Button("Open");
        // open Event Handler
        EventHandler<ActionEvent> openHandler = new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                // get file name
                File file = fileChooser.showOpenDialog(stage);
                if (file != null) {
                    label.setText(file.getName() + " selected");
                }
            }
        };
        openButton.setOnAction(openHandler);
        // create save button
        Button saveButton = new Button("Save");
        // save Event Handler
        EventHandler<ActionEvent> saveHandler = new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                // save file
                File file = fileChooser.showSaveDialog(stage);
                if (file != null) {
                    label.setText(file.getName() + " selected");
                }
            }
        };
        saveButton.setOnAction(saveHandler);
        // VBox
        VBox vBox = new VBox(PADDING, label, openButton, saveButton);
        // set Alignment
        vBox.setAlignment(Pos.CENTER);
        vBox.setPadding(new Insets(PADDING));
        // create scene
        Scene scene = new Scene(vBox);
        // scene
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String args[]) {
        launch(args);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文