【问题标题】:Jar Executable what am I doing wrong?Jar Executable 我做错了什么?
【发布时间】:2016-02-26 12:02:03
【问题描述】:

我正在使用 Eclipse IDE 进行编程。学习 Apache POI 教程后:

https://www.youtube.com/watch?v=RsrF2Ku7ad4

我通过 eclipse 创建了一个可执行 jar,并从以下链接执行以下步骤:http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Ftasks%2Ftasks-37.htm

  1. 从菜单栏的文件菜单中,选择导出。

  2. 展开 Java 节点并选择 Runnable JAR 文件。点击下一步。

  3. 在可运行 JAR 导出向导可运行 JAR 文件规范页面中,我选择了 WriteExcel 启动配置以用于创建可运行 JAR。

  4. 在导出目标字段中,我将其放置在我的 Eclipse 工作区中。

  5. 然后我选择将所需的库打包到生成的 JAR 文件中。

然后我将 JAR 文件与 Windows 中的 Java(TM) Platform SE 二进制文件相关联。 但是,当我双击它时,它不会像我在 Eclipse 中运行程序时那样创建一个 excel 文件。从命令行运行jar文件也不会返回错误或创建excel文件。

显然我做错了什么,非常感谢任何帮助。

编辑: 使用的代码与youtube教程相同:

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.DataFormat;

public class WriteExcel {
	public static void main(String[] args) throws IOException {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet sheet = workbook.createSheet("FirstExcelSheet");
		HSSFRow row = sheet.createRow(0);
		HSSFCell cell = row.createCell(0);
		cell.setCellValue("1. Cell");
		
		cell = row.createCell(1);
		DataFormat format = workbook.createDataFormat();
		CellStyle dateStyle = workbook.createCellStyle();
		dateStyle.setDataFormat(format.getFormat("dd.mm.yyyy"));
		cell.setCellStyle(dateStyle);
		cell.setCellValue(new Date());
		
		row.createCell(2).setCellValue("3. Cell");
		
		sheet.autoSizeColumn(1);
		
		workbook.write(new FileOutputStream("excel.xls"));
		workbook.close();
	}
}

【问题讨论】:

  • 也许您在操作系统中使用的 java 版本与 eclipse 完全不同?
  • 我的猜测是你的 jar 正在工作,但是有一些编码问题或者文件被写入相对路径并且你找不到它。尝试添加一个简单的System.out.println("hello")。如果您在命令行上执行 jar,您应该会看到“hello”。然后确保使用绝对路径将文件写入。
  • @Sercan Ozdemir:这会在命令行上触发错误消息或堆栈跟踪。
  • 如何从命令行运行 Jar?你的代码中有什么Exception 处理?
  • @Sercam Ozdemir:我使用的是相同的 java 版本。

标签: java eclipse excel jar apache-poi


【解决方案1】:

在一个小代码修复之后

来自

workbook.write(new FileOutputStream("excel.xls"));
workbook.close();

FileOutputStream fos = new FileOutputStream("excel.xls");
workbook.write(fos);
fos.close();

并执行您提到的步骤以生成 Jar 文件。我得到一个包含以下内容的 Jar 文件(jar tf WriteExcel.jar 的结果)

META-INF/MANIFEST.MF
org/
org/eclipse/
org/eclipse/jdt/
org/eclipse/jdt/internal/
org/eclipse/jdt/internal/jarinjarloader/
org/eclipse/jdt/internal/jarinjarloader/JIJConstants.class
org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoaderManifestInfo.class
org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.class
org/eclipse/jdt/internal/jarinjarloader/RsrcURLConnection.class
org/eclipse/jdt/internal/jarinjarloader/RsrcURLStreamHandler.class
org/eclipse/jdt/internal/jarinjarloader/RsrcURLStreamHandlerFactory.class
WriteExcel.class
XLStoCSVConvert.class
org/apache/
org/apache/poi/
org/apache/poi/ss/
org/apache/poi/ss/examples/
org/apache/poi/ss/examples/UpdateWorkBook.class
org/apache/poi/ss/examples/ToCSVExcelFilenameFilter.class
org/apache/poi/ss/examples/ToCSV.class
org/apache/poi/ss/examples/CreateNewWorkBook.class
poi-ooxml-3.10.1.jar
poi-ooxml-schemas-3.10.1.jar
xmlbeans-2.6.0.jar
stax-api-1.0.1.jar
dom4j-1.6.1.jar
xml-apis-1.0.b2.jar
poi-3.10.1.jar
commons-codec-1.5.jar

文件内容META-INF/MANIFEST.MF

Manifest-Version: 1.0
Rsrc-Class-Path: ./ poi-ooxml-3.10.1.jar poi-ooxml-schemas-3.10.1.jar
 xmlbeans-2.6.0.jar stax-api-1.0.1.jar dom4j-1.6.1.jar xml-apis-1.0.b2
 .jar poi-3.10.1.jar commons-codec-1.5.jar
Class-Path: .
Rsrc-Main-Class: WriteExcel
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

使用java -jar WriteExcel.jar 执行Jar 会生成文件excel.xls

双击编辑运行

如果在 Windows 资源管理器中双击 Jar 文件时没有执行,主要原因可能是

  • Jar 文件是使用更新的 JDK 版本编译的,然后是分配用于执行 Jar 文件的 JRE(在两台 PC 上使用 java -version 检查)

  • 分配了错误的应用程序来执行 Jar 文件
    在注册表中查看 key HKEY_CLASSES_ROOT\jarfile\shell\open\command 的值,它必须与"C:\Program Files\Java\jre1.8.0_66\bin\javaw.exe" -jar "%1" %* 相似(路径取决于安装的版本)

【讨论】:

  • 非常感谢您现在可以使用:java -jar WriteExcel.jar 但是,双击 jar 文件仍然不起作用。有什么我做错了吗?在进一步编程之前,我真的需要它是双击的情况。我为一个永远不会运行 cmd 的朋友创建这个。
  • @Evulafro 通过双击 Jar 文件查看我更新的解决方案答案。
  • 感谢您一直以来的支持。正在编译程序的电脑与试图打开它的电脑是一样的,因为我仍然只是在测试它。至于第二个选项注册表是正确的:i.imgur.com/E7kHZqT.png
  • 刚刚注意到你的 66 会更新,看看它是否能解决问题,尽管我有疑问 xD
  • 解决了这个问题的最奇怪的事情。不知道怎么做。但现在它的 66 可以工作了,哈哈,非常感谢你 :)
猜你喜欢
  • 2011-06-01
  • 1970-01-01
  • 2021-04-14
  • 2021-04-19
  • 2017-03-13
  • 2017-01-18
  • 2013-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多