我将尽可能详细地说明这一点,因为我需要帮助解决这个问题,这是我项目的最后一步。我非常接近我在工业中使用的桌面应用程序的完整开发。该应用程序读取输入的.xls文件,并使用其中的数据填充空表单。在我的台式计算机上,该程序是完美的,并且可以从桌面图标开始工作(作为可执行.jar文件的快捷方式运行)。这是.jar中的Main类。
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import javax.swing.*;
import java.io.IOException;
public class Launcher {
public static void main(String[] args) throws IOException, InvalidFormatException {
ExcelReader reader = new ExcelReader();
JOptionPane.showMessageDialog(null, "starting reader");
reader.main(args);
JOptionPane.showMessageDialog(null, "starting writer");
ExcelWriter writer = new ExcelWriter(reader);
writer.main(args);
}
}
但是,当在另一台计算机上运行相同的.jar文件时,它会到达读取器中的一个点,即获取所选文件,将其转换为InputStream,然后将其转换为HSSFWorkbook。我有JOptionPanes在我的阅读器中显示代码的显示进度,它正在向上创建工作簿的行。
public static void main(String[] args) throws IOException, InvalidFormatException {
final JFileChooser chooser = new JFileChooser();
JFrame frame = new JFrame();
int result = chooser.showOpenDialog(frame);
if (result == JFileChooser.APPROVE_OPTION) {
file = new File(chooser.getSelectedFile().getAbsolutePath());
System.out.println("File Selected for Input: " + file.getAbsolutePath());
JOptionPane.showMessageDialog(null, "File chosen : " + file.getAbsolutePath());
}
JOptionPane.showMessageDialog(null, "File has been selected");
//Desktop desktop = Desktop.getDesktop();
//desktop.open(file);
try {
JOptionPane.showMessageDialog(null, "Making inputstream");
InputStream excelFile = new FileInputStream(file);
JOptionPane.showMessageDialog(null, "making workbook with " + excelFile.toString());
HSSFWorkbook workbook = new HSSFWorkbook(excelFile);
JOptionPane.showMessageDialog(null, "making sheet");
Sheet sheet = workbook.getSheetAt(0);
JOptionPane.showMessageDialog(null, "sheet made 8)");
一旦我弄清楚为什么在另一台计算机上运行它会导致问题,我可以非常轻松地完成我的应用程序。我使用Apache POI文档将附加我的文件路径here。任何帮助是极大的赞赏。我怀疑问题可能与我的.jar结构有关,但我也找不到任何问题。我附上了我的Jar结构here。我非常乐意附上,讨论或包含所需问题的信息。非常渴望得到这个!