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

创建包含外部文本和ser文件的可运行Jar

通沛
2023-03-14

嗯,我尝试了这么多的方法来创建可执行jar,但4个小时后我放弃了。我正在尝试用我的项目制作可执行的jar文件,其中主类在控制器中。基本上,我尝试使用export/runnable JAR文件,并使用各种选项,包括生成ant脚本。我在终端总是有类似的错误

当我用终端运行时

java-jar fruitstore.jar

    bmj@OZ:~/Documents$ java -jar fruitStoreApp.jar 
java.io.FileNotFoundException: customers.ser (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at model.Shop.loadCustomers(Shop.java:250)
    at model.Shop.<init>(Shop.java:121)
    at model.Shop.getInstance(Shop.java:140)
    at model.Model.<init>(Model.java:12)
    at GUI.CustomerMainPanel.<init>(CustomerMainPanel.java:24)
    at GUI.MainMenuGUI.<init>(MainMenuGUI.java:50)
    at GUI.MainMenuGUI.getInstance(MainMenuGUI.java:35)
    at model.View.<init>(View.java:49)
    at model.Controller.<init>(Controller.java:42)
    at model.Controller.main(Controller.java:805)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
java.io.FileNotFoundException: users.ser (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at model.Shop.loadUsers(Shop.java:210)
    at model.Shop.<init>(Shop.java:122)
    at model.Shop.getInstance(Shop.java:140)
    at model.Model.<init>(Model.java:12)
    at GUI.CustomerMainPanel.<init>(CustomerMainPanel.java:24)
    at GUI.MainMenuGUI.<init>(MainMenuGUI.java:50)
    at GUI.MainMenuGUI.getInstance(MainMenuGUI.java:35)
    at model.View.<init>(View.java:49)
    at model.Controller.<init>(Controller.java:42)
    at model.Controller.main(Controller.java:805)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
java.io.FileNotFoundException: suppliers.ser (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at model.Shop.loadSuppliers(Shop.java:190)
    at model.Shop.<init>(Shop.java:123)
    at model.Shop.getInstance(Shop.java:140)
    at model.Model.<init>(Model.java:12)
    at GUI.CustomerMainPanel.<init>(CustomerMainPanel.java:24)
    at GUI.MainMenuGUI.<init>(MainMenuGUI.java:50)
    at GUI.MainMenuGUI.getInstance(MainMenuGUI.java:35)
    at model.View.<init>(View.java:49)
    at model.Controller.<init>(Controller.java:42)
    at model.Controller.main(Controller.java:805)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
java.io.FileNotFoundException: stocks.ser (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at model.Shop.loadStock(Shop.java:230)
    at model.Shop.<init>(Shop.java:124)
    at model.Shop.getInstance(Shop.java:140)
    at model.Model.<init>(Model.java:12)
    at GUI.CustomerMainPanel.<init>(CustomerMainPanel.java:24)
    at GUI.MainMenuGUI.<init>(MainMenuGUI.java:50)
    at GUI.MainMenuGUI.getInstance(MainMenuGUI.java:35)
    at model.View.<init>(View.java:49)
    at model.Controller.<init>(Controller.java:42)
    at model.Controller.main(Controller.java:805)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
java.io.FileNotFoundException: sales.ser (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at model.Shop.loadSales(Shop.java:150)
    at model.Shop.<init>(Shop.java:126)
    at model.Shop.getInstance(Shop.java:140)
    at model.Model.<init>(Model.java:12)
    at GUI.CustomerMainPanel.<init>(CustomerMainPanel.java:24)
    at GUI.MainMenuGUI.<init>(MainMenuGUI.java:50)
    at GUI.MainMenuGUI.getInstance(MainMenuGUI.java:35)
    at model.View.<init>(View.java:49)
    at model.Controller.<init>(Controller.java:42)
    at model.Controller.main(Controller.java:805)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
java.io.FileNotFoundException: orders.ser (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at java.io.FileInputStream.<init>(FileInputStream.java:93)
    at model.Shop.loadOrders(Shop.java:170)
    at model.Shop.<init>(Shop.java:127)
    at model.Shop.getInstance(Shop.java:140)
    at model.Model.<init>(Model.java:12)
    at GUI.CustomerMainPanel.<init>(CustomerMainPanel.java:24)
    at GUI.MainMenuGUI.<init>(MainMenuGUI.java:50)
    at GUI.MainMenuGUI.getInstance(MainMenuGUI.java:35)
    at model.View.<init>(View.java:49)
    at model.Controller.<init>(Controller.java:42)
    at model.Controller.main(Controller.java:805)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(ImageIO.java:1301)
    at GUI.WelcomeScreenGUI.<init>(WelcomeScreenGUI.java:33)
    at model.View.<init>(View.java:51)
    at model.Controller.<init>(Controller.java:42)
    at model.Controller.main(Controller.java:805)
    ... 5 more

提前感谢您的迅速回复

共有1个答案

吕鸿轩
2023-03-14

在检查了您的代码之后,我看到您已经设置了文件名,并且您正在使用FileInputStream来读取文件系统。

private String saleFile = "sales.ser";
...
public void loadSales(String inPutFile) {
    try {
        FileInputStream fileIn = new FileInputStream(inPutFile);

因此,程序将在当前工作目录中查找sale.ser。在您的IDE中,工作目录通常是项目根目录,也就是您的文件所在的地方,这就是它工作的原因。

所以既然你不能更改代码,这里有一些建议。

@echo off
setlocal

if "%JAVACMD%" == "" set JAVACMD=%JAVA_HOME%\bin\java.exe
if "%FRUITSTAND_HOME%" == "" set FRUITSTAND_HOME=%~dp0

cd "%FRUITSTAND_HOME%"
"%JAVACMD%" -cp "%FRUITSTAND_HOME%\lib\*" -jar "%FRUITSTAND_HOME%\fruitStoreApp.jar"
endlocal
 类似资料:
  • 问题内容: 我想用Java构建可运行的jar。我需要在jar中包含一些文件,以便在执行jar时会自动从java类读取文件。因此,我在项目中创建了一个文件夹,并从项目中引用了这些文件。我按照一些教程创建了jar文件,但是无法在jar文件中包含这些外部文件。请让我考虑使用外部文件创建可运行的jar。 我的文件结构是 我访问 的abc.txt 在 test1.java 类。我的代码是 使用eclipse

  • 我想用Java构建一个可运行的jar。我需要在jar中包含一些文件,这样当我执行jar时,文件就会自动从java类中读取。因此,我在项目中创建了一个文件夹,并从项目中引用了这些文件。我按照一些教程创建了jar文件,但我不能在我的jar文件中包含这些外部文件。请允许我使用外部文件创建可运行的jar。 当我使用eclipse导出选项创建可执行jar时,我无法看到jar内部的FileFolder目录。请

  • 我在NetBeans下开发了一个JavaFX应用程序,需要JRE8u60和一些外部库(jar和dll)以及一个“SQLite”数据库文件才能运行。我正在寻找一种方法来创建一个可执行文件或安装程序,它包括(或安装)这个版本的JRE和所需的库。 首先,我尝试了NetBeans本机打包程序,如https://NetBeans.org/kb/docs/java/native_pkg.html#fx所示,但

  • 我正在尝试创建一个包含以下项目内容的jar文件 项目 user_interface(包文件夹,包括与GUI相关的所有.类) function_operations(包文件夹,包括与操作相关的所有.类) 声音(文件夹包括所有声音文件) 图标(包括所有图像和图标) jar(包括所有外部jar文件) manifest.txt(有一行*main-class:user_interface.messenger

  • 我正在尝试制作一个.jar文件(这是我第一次),我很困惑。我了解如何使用命令提示符创建一个简单的jar文件,但对于我的程序,我导入了JavaMail API和我创建的另一个库(名为ArrayLibrary,其中填充了排序方法)。我如何在一个jar文件中创建这些?

  • 问题内容: 大家好,菜鸟Java问题。 我有一个Java项目,并且想在可执行jar中包含一个文本文件。现在,该文本文件位于默认程序包中。 InputFlatFile currentFile =新的InputFlatFile(“ src / theFile.txt”); 正如您使用src所看到的那样,我使用该行抓取文件。但是,这不适用于可执行jar。 有人可以让我知道如何将文件保存在可执行jar中,