我做了一个小项目,现在尝试将其转换为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”的所有内容,但没有成功。
我将感谢任何形式的帮助。
你尝试过绝对路径吗?
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);
我希望这有点用。