jar 从 java 项目中抛出错误,但效果很好

问题描述 投票:0回答:1

我做了一个小项目,现在尝试将其转换为exe文件。为此,我需要先制作一个 jar 文件,这是出现问题的地方:

这是 jar 程序抛出的内容。

C:> C:\[path]\IdeaProjects\Erpegkraj\out\artifacts\Erpegkraj_jar\Erpegkraj.jar
ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
Exception in thread "main" java.lang.ExceptionInInitializerError
        at Erpegkraj.Grafika.MenuGłówne.<init>(MenuGłówne.java:26)
        at Erpegkraj.PanelGry.<init>(PanelGry.java:63)
        at Erpegkraj.Interfejs.main(Interfejs.java:39)
Caused by: org.apache.poi.openxml4j.exceptions.InvalidOperationException: Can't open the specified file input stream from file: 'zasoby\Dane\Dane.xlsx'
        at org.apache.poi.openxml4j.opc.ZipPackage.openZipEntrySourceStream(ZipPackage.java:188)
        at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:175)
        at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:285)
        at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:192)
        at Erpegkraj.ZarządcaArkuszów.przeczytajWierszArkusza(ZarządcaArkuszów.java:24)
        at Erpegkraj.Postacie.Bohater.<init>(Bohater.java:39)
        at Erpegkraj.Postacie.Bohaterowie.Krzyżowiec.<init>(Krzyżowiec.java:13)
        at Erpegkraj.Grafika.DaneWMenu.Bohaterowie$1.evaluate(Bohaterowie.java:15)
        at Erpegkraj.Grafika.DaneWMenu.Bohaterowie.<clinit>(Bohaterowie.java:20)
        ... 3 more
Caused by: java.io.FileNotFoundException: zasoby\Dane\Dane.xlsx (System nie może odnaleźć określonej ścieżki)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(FileInputStream.java:213)
        at java.base/java.io.FileInputStream.<init>(FileInputStream.java:152)
        at org.apache.poi.openxml4j.opc.ZipPackage.openZipEntrySourceStream(ZipPackage.java:185)
        ... 11 more

它一直说无法打开我的资源文件夹(称为zasoby)中的文件(excel 文件)。

这是我认为有问题的代码的一部分:

public static String readSheetsLine(File sheetsPath, String sheetsName, String name) throws IOException {
    String text = "";
    OPCPackage package;
    Workbook wb;
    try {
        package = OPCPackage.open(sheetsPath);
        wb = new XSSFWorkbook(package);
    } catch (InvalidFormatException e) {
        throw new RuntimeException(e);
    }
    Sheet sheet = wb.getSheet(sheetsName);

    for(Row r: sheet){
        String value = r.getCell(0).getStringCellValue();
        if(Objects.equals(value, nazwa)){
            for (Cell c : r){
                c.setCellType(CellType.STRING);
                String typ = sheet.getRow(0).getCell(c.getColumnIndex()).getStringCellValue();
                if (!Objects.equals(typ, "")){
                    tekst += typ + "#"+ c.getStringCellValue()+"~";
                }else break;
            }
            break;
        }
        if (Objects.equals(value, "")) break;
    }
    wb.close();
    package.close();
    return text;
}

我已经尝试了在互联网上可以找到的有关“InvalidOperationException”的所有内容,但没有成功。

我将感谢任何形式的帮助。

java file command-line jar apache-poi
1个回答
0
投票

你尝试过绝对路径吗?

File sheetsPath = new File("zasoby\\Dane\\Dane.xlsx");
String absolutePath = sheetsPath.getAbsolutePath();
package = OPCPackage.open(new File(absolutePath));

或者尝试使用ClassPathrecourses

InputStream inputStream = new ClassPathResource("zasoby/Dane/Dane.xlsx").getInputStream();
    OPCPackage pkg = OPCPackage.open(inputStream);

如果 Excel 文件包含在您的 JAR 中(在资源文件夹中),您应该从类路径加载它,而不是使用文件路径。

InputStream stream = YourClass.class.getClassLoader().getResourceAsStream("zasoby/Dane/Dane.xlsx");
package = OPCPackage.open(stream);

我希望这有点用。

© www.soinside.com 2019 - 2024. All rights reserved.