6

Eclipse でソース コードから jar ファイルをエクスポートすると、エラーが発生したソースと行番号に関する情報がスタック トレースに表示されないという、非常に厄介な問題があります。プロジェクトの ecplise でコンパイラ設定を確認しましたが、セクション クラスファイル生成のすべてのオプションが設定されています。サーバー ソフトウェア bukkit によって実行される Minecraft 用のプラグインを開発しています。私のソースは de.celestialcraft.agentestate パッケージにあります。例外が発生すると、次のようなスタック トレースが表示されます。

23:43:57 [INFO] com.sk89q.worldedit.CuboidClipboard@fb44f99
23:43:57 [SEVERE] Could not pass event BlockDamageEvent to AgentEstate v2.1alpha

org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:363)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:477)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:462)
    at de.celestialcraft.AgentEstate.AgentEstateBlockListener.onBlockBreak(U
nknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:361)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:477)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:462)
    at ir.b(ItemInWorldManager.java:393)
    at ir.a(ItemInWorldManager.java:200)
    at iv.a(NetServerHandler.java:782)
    at ei.a(Packet14BlockDig.java:67)
    at cg.b(TcpConnection.java:467)
    at iv.d(NetServerHandler.java:220)
    at iw.b(NetworkListenThread.java:57)
    at ht.b(DedicatedServerListenThread.java:34)
    at net.minecraft.server.MinecraftServer.r(MinecraftServer.java:981)
    at ho.r(DedicatedServer.java:309)
    at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:857)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:744)
    at fy.run(ThreadMinecraftServer.java:16)
Caused by: java.lang.NullPointerException
    at com.sk89q.worldedit.schematic.MCEditSchematicFormat.save(Unknown Sour
ce)
    at de.celestialcraft.AgentEstate.Estate.saveState(Unknown Source)
    at de.celestialcraft.AgentEstate.Estate.create(Unknown Source)
    at de.celestialcraft.AgentEstate.Estate.create(Unknown Source)
    at de.celestialcraft.AgentEstate.AgentEstateBlockListener.onBlockDamage(
Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:361)
    ... 25 more

ビルド パス設定で jdk パスをプロジェクトの lib として設定しました。この問題についてお役に立てれば幸いです。ありがとうございました。

4

2 に答える 2

1

Bukkit は API であるため、bukkit プラグインをコーディングすると、Bukkit だけがそのコードで何をすべきかを知っているような方法でコードのブロックを作成することになります。ここに投稿したエラーの原因を突き止めるには、StackTrace の "at" 行の一番上の行を調べ、Github の Bukkit ソース ファイルでそれを見つける必要があります。たとえば、このスタックトレースでは、これが一番上にあります:

org.bukkit.event.EventException
  at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:363)

363 行目の JavaPluginLoader のエラーが原因で Bukkit EventException が発生していることがわかります。そこで何が起こったのかを正確に調べるには、https://github.com/Bukkit/Bukkit/releasesにアクセスして、コーディング対象の MC バージョンに適したソース バージョン。この zip ファイルでは、src/main/java/ にソース フォルダーがあり、このスタック トレース (org/bukkit/plugin/java/JavaPluginLoader) の 2 行目のパスをたどると、そのファイルの 363 行目に、エラーが発生しました。

あなたがコーディングしているBukkitのバージョンがわからないので、そのファイルの363行目を含むメソッドがあなたの問題に関連していると言うことを除いて、ここであなたを助けることはできません. そのメソッドが何をするかがわかれば、それは Bukkit があなたのプラグイン コードで何をしようとして失敗したかということです。

于 2016-04-23T22:10:17.017 に答える
0

プロジェクトは、プロジェクト固有の設定を有効にするようにマークする必要があり、Java コンパイラ -> クラスファイルの生成では、オプション行番号を追加... のマークを外す必要があります。

于 2013-04-15T01:29:10.083 に答える