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

Jar文件在从7更新到10后不会显示资源

汤跃
2023-03-14

我经常使用某个jar文件来显示文本文件并允许您以不同的方式过滤列表。

在我从Java 7升级到Java 10之前,这一切都非常有效。现在它将不再显示资源文本文件。

下面是我获取jar文件的位置:https://github.com/dragan224/battle_cats_en_combos

jar文件的根目录中有两个。jar在其内部使用的txt文件。是否存在阻止此操作的安全设置?还是版本更改导致代码失效?

在代码文件中,我可以看到它使用的是:InputStream输入=(InputStream)类加载器。班getResourceAsStream(“/”cat\u file\u name)

因此,我重新编译了它,并在命令行的编译字符串中指定了源代码1.8,但没有任何区别。

我甚至不知道怎么弄清楚为什么它不起作用。当我运行命令行javaw-jar CatCombos时。jar(我的新编译名),它没有在命令行上给出任何响应。它运行,但不显示文本文件,就像原始文件一样。

这一切都是在我安装jdk-10.0.2\u windows-x64\u bin时开始的。就在今天。在此之前,我运行的是1.8 JRE,它运行得很好。

[更新]

我安装了JDK 8.44,用该文件夹中的javaw.exe运行jar文件,jar应用程序运行完美,显示内容很好。所以有些东西被更改了,或者我错过了一些东西,Java10可以正确运行文件。

[更新]

好的,所以我关于使用Java的问题被迁移到了Stack Exchange,尽管这不是一个关于编码的问题。这是有人犯的一个错误,由于现在认为这是一个编码问题(首先没有提供代码),我想Java 10没有显示文本文件的原因是因为用于Java 8的代码不再可行。因此,我将展示代码,并通过将其转换为编码问题来解决这个问题。

这是我加载文本文件的代码。

        InputStream input = (InputStream) ClassLoader.class.getResourceAsStream("/" + file_name);
        BufferedReader br = new BufferedReader(new InputStreamReader(input));
        String line = br.readLine();
        while (line != null) {
        //do something
        }

因此,对于项目的结构,它非常简单,如下所示(顺便说一下,这是我使用过的第一个java项目):

/src
/src/javafiles (no subfolders; just .java files)
/src/textfile.txt  (the one I'm trying to load)
/manifest.txt (telling which java file to start up with)
/compile.bat

因此,文本文件位于java二进制文件的父文件夹中。

[更新]

将项目加载到Eclipse(我以前从未使用过)后,我发现这一行出现了一个空指针错误:

InputStream input = (InputStream)ClassLoader.class.getResourceAsStream(combo_file_name);

Eclipse给出了以下描述:

打开声明InputStream java。lang.Class。getResourceAsStream(字符串名称)

@敏感

查找具有给定名称的资源。

如果此类位于命名模块中,则此方法将尝试在模块中查找资源。这是通过委托给模块的类加载器findResource(String,String)方法来完成的,并使用模块名称和资源的绝对名称调用它。命名模块中的资源受模块getResourceAsStream方法中指定的封装规则的约束,因此当资源是未向调用方模块打开的包中的非“.class”资源时,此方法返回null。

否则,如果该类不在命名模块中,则用于搜索与给定类关联的资源的规则由该类的定义类加载器实现。此方法委托给此对象的类加载器。如果此对象是由引导类加载器加载的,则该方法将委托给类加载器。getSystemResourceAsStream。

在委派之前,使用以下算法从给定的资源名称构造绝对资源名称:•如果名称以“/”(“\u002f”)开头,则资源的绝对名称是名称中“/”后面的部分。•否则,绝对名称的形式如下:modified\u package\u name/name

其中modified_package_name是这个对象的包名,用'/'代替 '.' ('\u002e')。

参数:所需资源的名称返回:java.io.InputStream对象;如果没有找到具有此名称的资源,则为null,该资源位于至少对调用者模块不开放的包中,或者安全管理器拒绝访问该资源。抛出:NullPointerException-如果名称为null自:1.1另请参阅:Module.getResourceAsStream(String)@revised9@specJPMS

那么,我该怎么办呢?我在想。由于某种原因,jar找不到文本文件。

以下是我如何处理文件:

package catcombo;

public class Main {

    public static void main(String[] args) {
        new MainWindow("NyancomboData.txt", "Names.txt");
    }

}

共有1个答案

华君浩
2023-03-14

在从1.8到版本10的更新中,必须引入新的严格性,在类中使用静态方法。

我的代码

InputStream input = (InputStream) ClassLoader.class.getResourceAsStream("/" + file_name);

当我把它改成

InputStream input = MyOwnClass.class.getResourceAsStream(file_name);

然后一切开始完美运转。

 类似资料:
  • 我试图在Windows 10上为我的XAMPP Apache更新PHP7.3到PHP7.4。现在Apache不会启动。。。 我正在使用自签名安全证书进行开发。 我从Apache收到的错误消息是: 以下是最新的错误日志条目: 我遵循了本教程:https://medium.com/oceanize-geeks/how-to-upgrade-lower-version-to-latest-php-ver

  • 我试图显示包含从资源加载的帮助的chm文件: 从NetBeans运行项目时,帮助文件将正确显示。不幸的是,当程序从jar文件运行时,它不起作用;它会导致异常。 在我看来,URI描述的jar的内部结构还没有被认识到。。。还有更好的办法吗?例如,使用BufferReader类? BuffereImage类修复了jpg文件的类似问题 没有任何转换到URI。。。 谢谢你的帮助...

  • 问题内容: 我正在尝试使用以下命令更新现有jar(在本示例中为antlr)中的文件: 但是我收到以下消息 java.util.zip.ZipException:重复条目:java.util.zip.ZipOutputStream.putNextEntry(ZipOutputStream.java:175)上的antlr / ANTLRError.class,java.util.jar.JarOut

  • 我有一个netbeansjavagui项目。它包含用于图像的java文件和文件夹。我的项目中最重要的一部分是通过单击按钮来显示图像,比如说单击“下一步”按钮。当我点击“下一步”按钮时,图像将从IMG文件夹中逐个显示。我将图像放在标签中,如下所示: 我运行了这个程序,到目前为止,它可以按照我的要求工作。 然后,我需要将项目创建到一个jar文件中。我使用Netbeans和这个来创建我的项目的JAR文件

  • 问题内容: 我正在将PHP与Ajax和JQuery一起进行试验,以创建一个可以在其中写入文本文件的站点,然后让该站点将文本文件的内容加载到div中。 这是我正在使用的JQuery代码。 这是PHP和相关的HTML。 因此,它的作用是让用户使用#wordinput写入“ text.txt”,然后使用.load()更新#text以显示来自“ text.txt”的新更新文本。然后,其他用户也可以查看并写

  • 我试过将图像定位到许多不同的地方,也试过不同的加载图像的方法,但没有一种方法奏效,我已经确保图像在导出的JAR文件中确实正确地出现。