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

为带有CSS文件的程序创建带有jpackage的安装程序

夏侯华彩
2023-03-14

我需要帮助一个问题,我遇到了包装我的程序与JPackage。该程序是在Eclipse中创建的非模块化JavaFX应用程序。在Eclipse中,应用程序可以精确地编译和运行。但当我使用命令提示符进行编译和运行时,编译工作了,但应用程序不再运行了。我得到以下错误消息

javac--module-path%path_to_fx%--add-modules javafx.controls,javafx.fxml-d out@sources.txt

java--module-path%path_to_fx%--add-modules javafx.controls,javafx.fxml-cp out application.main(此处出现错误)

jar--create--file=libs/sample1.jar--main-class=application.main-c out。

共有1个答案

呼延震博
2023-03-14

谢谢你的提示。我仔细阅读了与链接一起给出的手册。现在我明白我的代码可能有问题。之前我认为jpackage和命令提示符中的命令有问题。同时,我重新编写了代码,并用URL类替换了文件类。但我还是得到了一个类似的错误。因此,我编写了一个新的(简单的)代码来再现错误。

package application;
    
import java.io.BufferedReader;

import java.io.FileReader;
import java.io.IOException;
import java.net.URL;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.*;


public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            Scene scene = new Scene(root,600,500);
            URL urlImage = getClass().getResource("image.jpg");
            Image image = new Image(urlImage.toExternalForm(), 600, 400, true, true);
            ImageView imageView = new ImageView(image);
            root.setCenter(imageView);
            
            Label headline = new Label("Example Image");
            URL urlStyles = getClass().getResource("styles.css");
            headline.getStylesheets().add(urlStyles.toExternalForm());      
            root.setTop(headline);
            
            Button button = new Button();
            URL urlFile = getClass().getResource("text.txt");
            String temp = urlFile.toString().replaceFirst("file:/", "");
            button.setText(read(temp));
            root.setBottom(button);         
            
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        launch(args);
    }
    
    public String read (String file) throws IOException {
        FileReader fileReader = new FileReader(file);
        BufferedReader in = new BufferedReader(fileReader);
        try {           
            String str = in.readLine();
            in.close();
            return str;
        } catch(IOException e) {
            e.printStackTrace();
            return "Error";
        }
    }
}

在使用命令提示符进行编译时,我仍然得到一个错误:

java.lang.NullPointerException:无法调用“java.net.url.ToExternalForm()”,因为“”在application.main.start(main.java:25)在javafx.graphics/com.sun.javafx.application.launcherimpl.lambda$launchapplication1$9(launcherimpl.java:846)在javafx.graphics/com.sun.javafx.application.platformimpl.lambda$runandwait$12(platformimpl.java:455)在(accessController.java:391)在javafx.graphics/com.sun.javafx.application.platformimpl.lambda$runlater$11(platformimpl.java:427)在javafx.graphics/com.sun.glass.ui.invokelaterdispatcher$future.run(invokelaterdispatcher.java:96)在javafx.graphics/com.sun.glass.ui.win.winapplication._runloop(本机方法)在javafx.graphics/com.sun.glass.ui.win.winapplication.lambda$runloop$3(winapplication.java:174)在

如果我尝试加载图像(代码中的第一段)、css(第二段)或txt文件(最后一段),这并不重要。所有这些文件(image、css、txt)与main类一样都在同一个目录中。

也许我错过了树木中的森林,但我认为我使用了URL类,就像指南解释的那样。我在下面听取进一步的建议。谢谢你!

 类似资料:
  • 我正在构建Mac(10.10.5)安装程序与install4j和捆绑JRE选项在媒体步骤。 在创建安装程序后,当我安装我的应用程序时,在应用程序文件夹中没有生成JRE文件夹。我怎么才能拿到这个?

  • 我已经用JavaFX创建了我的应用程序。一切都很好,所以我使用Jpackage在Windows中制作了一个可安装的应用程序版本。 在我安装包之后,Windows计算机仍然要求安装JVM。 我的期望是,我可以使用Jpackage在任何计算机上安装我的JavaFX应用程序,并自动设置JVM。。用户只需点击图标并运行应用程序。 关于Jpackage中的正确命令的任何建议,以将我的JavaFX应用程序ja

  • 想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。 我正在开发一个javafx应用程序。此应用程序与设备通信,因此设备JAR不是模块化的,它们附带一些添加到开发中的dll文件。现在,它在Netbeans 12.6上运行得很好,但在我使用jdk-17 jpackage创建安装程序时就不是了。我相信我遗漏了一些东西,但由于我对这个jpackage还很陌生,所以我不知道如何解决它。以下是

  • 以前我使用Izpack安装我的Java应用程序,当用户想要安装新版本时,他们只需重新安装到相同的位置(c“/Program files/jthink/jaikoz”),这将用较新的文件替换较旧的文件,用户不需要先卸载旧版本。 我现在已经为应用程序的最新版本构建了一个使用JPackage(现在是Java,JDK14的一部分)的安装程序,这将继续安装到相同的位置。问题是因为JPackage强制了一个新

  • 问题内容: 文件孔是文件中的空白空间,但是不占用任何磁盘空间,并且包含空字节。因此,文件大小大于其在磁盘上的实际大小。 但是,我不知道如何创建带有文件孔的文件进行试验。 问题答案: 将命令与参数一起使用。 这会为您创建一个从字节8192到字节28671的漏洞。 这是一个示例,说明该文件确实存在漏洞(该命令告诉您文件正在使用多少磁盘块): 如您所见,带孔的文件尽管大小相同,但占用的磁盘块较少。 如果

  • 我使用jpack打包了我的java应用程序。当我使用打包的安装程序安装它时,安装后的目录始终是