当前位置: 首页 > 知识库问答 >
问题:

FileNotFoundException加载jar文件,即使该文件存在

罗鸿畴
2023-03-14

我有一个应用程序,它在根文件夹的lib文件夹中加载一个jar文件,当我把这个根文件夹放在C:\或C:\someFolder中时,它工作得很好,但当我把它放在“程序文件(x86)”中时,它返回了FileNotFoundException,即使在管理模式下已经存在并正在运行cmd。

    JarFile jf;
    Image img = null;
    compuservice = new FrmPrincipal();
    compuservice.setVisible(true);
    System.out.println("Path of MainClass: " + Main.class.getResource("Main.class").getPath());
    System.out.println("Path Icon over MainClass: " + Main.class.getResource("Icon.png").toString());
    System.out.println("Path Icon over compuservice: " + compuservice.getClass().getResource("Icon.png").toString());
    System.out.println("Path Main.class: " + Main.class.getProtectionDomain().getCodeSource().getLocation().getPath());
    if(compuservice.getClass().getResource("Icon.png").toString().contains("jar")){
        jf = new JarFile(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath());
        Enumeration<JarEntry> entries = jf.entries();
        while(entries.hasMoreElements()){
            JarEntry entrie = (JarEntry)entries.nextElement();
            if(entrie.getName().contains("Icon.png")){
                img = ImageIO.read(ImageIO.createImageInputStream(jf.getInputStream(entrie)));
                break;
            }
        }
        if(img == null)
            img = ImageIO.read(compuservice.getClass().getResource("javax/swing/plaf/basic/icons/JavaCup16.png"));
        compuservice.setIconImage(img);         
    }

我得到System.out.println来调试信息并返回正确的路径。

从应用程序中使用println的Stacktrace:

路径main.class:/c:/program%20 files%20(x86)/computforte/compuservice/compuservice-0.0.13.4.3-snapshot.jar

Exception in thread "main" java.io.FileNotFoundException: C:\Program%20Files%20(x86)\CompuForte\compuservice\CompuService-0.0.13.4.3-SNAPSHOT.jar (O sistema não pode encontrar o caminho especificado)
        at java.util.zip.ZipFile.open(Native Method)
        at java.util.zip.ZipFile.<init>(Unknown Source)
        at java.util.zip.ZipFile.<init>(Unknown Source)
        at java.util.jar.JarFile.<init>(Unknown Source)
        at java.util.jar.JarFile.<init>(Unknown Source)
        at com.compu.server.main.Main.InitInstance(Main.java:37)
        at com.compu.server.main.Main.<init>(Main.java:24)
        at com.compu.server.main.Main.main(Main.java:102)
2015-10-01 10:11:16.384:INFO::AWT-EventQueue-0: Logging initialized @521ms
C:\Program%20Files%20(x86)\CompuForte\compuservice\lib
0 [AWT-EventQueue-0] ERROR com.compu.ws.rest.app.AppWS  -
null

共有1个答案

高吉星
2023-03-14

我看得出问题出在哪里。以下是您正在尝试代码尝试使用的路径:

C:\program%20files%20(x86)\computorte\compuservice\compuservice-0.0.13.4.3-snapshot.jar

注意到%20了吗?这是一个“百分比编码”的空格字符。应该是真正的太空人物。

Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()
 类似资料:
  • 尽管如此,我还是得到了例外。我已经用上面的三个文件进行了尝试。该文件也没有在任何地方打开,所以它应该是可读的。我已经花了一个多小时在一个简单的文件名规范上,所以我在这一点上非常紧张。 这里有个例外:

  • 问题内容: 我有一个非常奇怪的问题,我正在尝试使用一些Java代码和JLayer播放一些MP3。我有一个方法设置来生成文件路径,但这给我带来了很多痛苦。这是return语句(以及该方法涉及的所有代码): 我有一组大约150个mp3文件,它们分别名为1.mp3、2.mp3等。它们最多可达156个(之间缺少一些文件)。根据用户输入的3位数代码,它会播放一种声音。这段代码可以 完美地 工作在1-99之间

  • 问题内容: 上面是我的代码(并且我也有错误的图片:http : //folk.uio.no/arnabkd/test/images/error-code- task.jpg 如您所见,该txt文件与StormAnalysis.java文件位于同一文件夹中。另外,如果我将文件路径更改为“ weather.dat”(作为另一个任务/问题给出),该代码将起作用。 任何想法将不胜感激! 问题答案: 该文件

  • 好的,基本上,我尝试使用这里描述的方法JarFileLoader来加载一个jar,其中包含一个类,该类的使用方式与类路径上的相同(类名将是动态的,因此我们可以添加任何jar任何类和程序将通过解析文本文件加载它,在主线中)。 问题是当我调试和检查URLClassLoader对象时 行: getResource()在参数中找不到类名。 有人已经尝试过用这种方式加载jar文件了吗? 谢谢。 加载器: 主

  • 问题内容: 我正在创建一个小程序,该程序将读取一个文本文件,其中包含大量随机生成的数字,并产生诸如均值,中位数和众数之类的统计信息。我已经创建了文本文件,并确保在声明为新文件时名称完全相同。 是的,该文件与类文件位于同一文件夹中。 } 错误行的内容如下: 问题答案: 如何添加: 打印出来。它会告诉您当前的工作目录是什么。然后,您应该能够看到为什么找不到文件。 除了找不到代码之外,您还可以检查以允许