Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未找到可运行JAR文件异常_Java_Embedded Resource - Fatal编程技术网

Java 未找到可运行JAR文件异常

Java 未找到可运行JAR文件异常,java,embedded-resource,Java,Embedded Resource,我想知道如何在Eclipse中的源包(即/src/resources/images/或/resources/images/)内部或外部的资源文件夹中创建一个包含资源(图片、PDF)的可运行JAR。目前,我将资源放在eclipse项目的源文件夹中,但我也在包中自己的文件夹中尝试过。该程序在eclipse中构建并执行得很好,但当我作为可运行的jar导出时,在桌面上运行时,我会不断得到一个文件not found exception。我用这样的字符串声明我的文件 private String file

我想知道如何在Eclipse中的源包(即/src/resources/images/或/resources/images/)内部或外部的资源文件夹中创建一个包含资源(图片、PDF)的可运行JAR。目前,我将资源放在eclipse项目的源文件夹中,但我也在包中自己的文件夹中尝试过。该程序在eclipse中构建并执行得很好,但当我作为可运行的jar导出时,在桌面上运行时,我会不断得到一个文件not found exception。我用这样的字符串声明我的文件

private String file =  "src/resources/orderForm.pdf";
我知道我应该使用getResourceAsStream(),但由于一些限制,我不能(与文件的保存方式有关,我读取的是整个pdf文件,而不是流),所以我想知道如何将文件放入jar中的正确位置。如果我在完成后解包,它们总是显示在顶层,文件夹之外。下面是我当前项目结构的屏幕截图。为了说明这一点,这个项目在eclipse中工作得很好,在java构建属性中也是如此,源文件夹和所有子文件夹都在构建路径中,我在前面的测试中也尝试过对空资源文件夹进行同样的操作。

为了方便从Eclipse导出而不必经常考虑它,我建议将resources文件夹放在
src
文件夹下。长话短说,如果你没有把它放在
src
文件夹中,每次创建一个jar时,你都需要选中
resources
文件夹旁边的复选框。所以只要把它放在
src
文件夹中,就可以解决一些问题

至于查阅档案,我会试试看

private String file = "resources/finished.pdf";

这允许您访问
src/resources/finished.pdf下的文件

您需要执行getResourceAsStream,并确保pdf内置到jar中。因为它们在源文件夹中,所以它们应该

假设您在src/resources/orderForm.pdf下有pdf,它将以/resources/orderForm.pdf的形式在jar文件中结束。您将为/resources/orderForm.pdf打开一个资源流

如果您必须有一个诚实的文件,那么您需要将PDF作为资源流读取、文件输出并将其输出到临时文件,然后使用该文件的代码。或者,您无法将PDF打包到jar中

public class PDFWriter {

public static final String testDir = "C:\\pdftest\\"; 
public static final String adobePath = "\"C:\\Program Files\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe\"";

public static void main(String[] args){

    try {
        new PDFWriter().run();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void run() throws Exception {
    InputStream in = this.getClass().getResourceAsStream("/resources/test.pdf");
    new File(testDir).mkdirs();
    String pdfFilePath = testDir + "test.pdf";
    FileOutputStream out = new FileOutputStream (pdfFilePath);
    byte[] buffer = new byte[1024];
    int len = in.read(buffer);
    while (len != -1) {
        out.write(buffer, 0, len);
        len = in.read(buffer);
    }
    out.close();

    Runtime rt = Runtime.getRuntime();
    String command = adobePath + " " + pdfFilePath;
    rt.exec(command);
}

}
文件方式在eclipse中工作的唯一原因是因为bin文件夹是一个真正的文件夹,但是当您构建这个东西时,它会被压缩到一个jar中

可能对源文件夹有点困惑。如果您有一个名为“src”的源文件夹,则其下的包结构不包含“src”。构建时,src/net/whatever/Class.java将变成net/whatever/Class.Class


因此,您可以创建另一个名为“rsrc”(参考资料)的源文件夹,并将您的参考资料/order.pdf放在该文件夹下。rsrc/resources/order.pdf将在您构建jar时变为resources.order.pdf。

它当前位于src文件夹中,在上图中我相信它显示了它?除非它们在子文件夹中,而不是真正在src文件夹中?在src和项目根目录下都有一个resources文件夹。我建议只将其放在src(您填充的资源文件夹当前所在的位置)“我一直在获取未找到的文件异常”归档中的资源称为嵌入式资源。我之所以“需要”这个文件,主要是因为pdf实际上是一个表单,然后我调用该表单,填充它,然后将其作为模板提供。我曾考虑过使用GetResourceAsStream,但主要缺点(或我找不到的东西)是如何将其流式输出到临时文件,但听起来这正是我应该做的,你能发布一个这样的示例吗?添加了示例代码-这将打开资源流,编写临时文件,并在Acrobat Reader中打开文件。根据需要更改文件路径!