簡體   English   中英

ClassLoader.getResources()返回空枚舉

[英]ClassLoader.getResources() returns empty enumeration

我一直在使用ClassLoader類的getResources()函數在我在Minecraft中編碼的某個插件中加載類。

找到主類的包是:“ rr.aesir”。 我在此包名稱之前,之后,點之間,之間用斜杠嘗試了所有可能的情況,並且所有內容均返回空Enumeration。 (Spigot版本:1.12.1)。 也嘗試從其他類中調用它。

ClassLoader loader = this.getClass().getClassLoader();
Enumeration<URL> urls = this.loader.getResources("/rr/aesir");
String path = urls.nextElement().getPath();

這段代碼放在擴展JavaPlugin的主類中。 我收到一個錯誤消息,說NoSuchElementException。 我沒有在類中的任何地方調用nextElement(),所以不是我跳過了任何現有的元素。

我沒有選擇,任何幫助都可以接受。

完整的堆棧跟蹤:

[03:07:43 INFO]: [Aesir] Enabling Aesir v1.0
[03:07:43 INFO]: [Aesir] Aesir has been enabled.
[03:07:43 ERROR]: Error occurred while enabling Aesir v1.0 (Is it up to date?)
java.util.NoSuchElementException: null
        at sun.misc.CompoundEnumeration.nextElement(Unknown Source) ~[?:1.8.0_151]
        at rr.aesir.Aesir.load(Aesir.java:72) ~[?:?]
        at rr.aesir.Aesir.onEnable(Aesir.java:47) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) ~[spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:402) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:384) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:333) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.reload(CraftServer.java:755) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.Bukkit.reload(Bukkit.java:525) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:25) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:651) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:637) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:444) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:407) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.1.jar:git-Spigot-da42974-8f47214]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_151]

類結構圖:

項目內部的類結構。

刪除前導/

要編譯代碼,也請刪除this. loader之前。

ClassLoader loader = this.getClass().getClassLoader();
Enumeration<URL> urls = loader.getResources("rr/aesir");
String path = urls.nextElement().getPath();

請注意, getPath()可能不會返回您認為會返回的字符串。

url.toString()返回類似file:/C:/foo/bar/rr/aesir
url.getPath()返回/C:/foo/bar/rr/aesir

如果需要實際路徑,請調用Paths.get(url.toURI()).toString()
返回C:\\foo\\bar\\rr\\aesir

如果您是Java 7之前的用戶,請調用new File(url.toURI()).toString()
如果您的代碼是從jar文件運行的,那當然是行不通的。

我想假設您要列出rr/aesir目錄中的所有資源,您對getResources確切功能有點誤解。

根據javadoc

查找具有給定名稱的所有資源。 資源是某些數據(圖像,音頻,文本等),可由類代碼以與代碼位置無關的方式進行訪問。

可以有多個具有特定名稱的資源,這就是為什么它返回一個枚舉的原因。 並且不在目錄中列出資源。

以下問題的解決方案是可以用來列出資源的方法: 如何列出JAR文件中的文件?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM