尝试序列化为 Json 时出错,但如果我不添加笼子则不会发生错误

问题描述 投票:0回答:1
[19:44:33 ERROR]: Could not pass event InventoryClickEvent to LuckyWars v1.0.0
org.bukkit.event.EventException: null
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:78) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:564) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:549) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:1681) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(PacketPlayInWindowClick.java:17) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at net.minecraft.server.v1_8_R3.PacketPlayInWindowClick.a(PacketPlayInWindowClick.java:5) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(PlayerConnectionUtils.java:9) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[?:?]
        at java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[?:?]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SystemUtils.java:11) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:880) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:412) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:814) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:647) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at net.minecraft.server.v1_8_R3.MinecraftServer.lambda$spin$0(MinecraftServer.java:133) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at java.lang.Thread.run(Thread.java:833) [?:?]
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.TaskQueue java.util.Timer.queue accessible: module java.base does not "opens java.util" to unnamed module @6cf0e0ba
        at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[?:?]
        at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[?:?]
        at java.lang.reflect.Field.checkCanSetAccessible(Field.java:178) ~[?:?]
        at java.lang.reflect.Field.setAccessible(Field.java:172) ~[?:?]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:140) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:83) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.Gson.getAdapter(Gson.java:359) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:122) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:46) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:92) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:91) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:142) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:83) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.Gson.getAdapter(Gson.java:359) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:122) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:46) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:92) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:91) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:142) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:83) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.Gson.getAdapter(Gson.java:359) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:122) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:46) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:92) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:91) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:142) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:83) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.Gson.getAdapter(Gson.java:359) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:122) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:46) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:92) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:91) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:142) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:83) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.Gson.getAdapter(Gson.java:359) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:55) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:99) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:219) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:99) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:219) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:99) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:219) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.Gson.toJson(Gson.java:600) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.Gson.toJson(Gson.java:579) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.Gson.toJson(Gson.java:534) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.google.gson.Gson.toJson(Gson.java:514) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        at com.luckywars.game.utils.MapDataSerializer.serialize(MapDataSerializer.java:12) ~[?:?]
        at com.luckywars.game.database.dbs.MapDB.saveMapData(MapDB.java:40) ~[?:?]
        at com.luckywars.game.setupwizard.Session.delete(Session.java:117) ~[?:?]
        at com.luckywars.game.setupwizard.WizardManager.endSession(WizardManager.java:22) ~[?:?]
        at com.luckywars.game.setupwizard.gui.ConfirmExitGui.handleClick(ConfirmExitGui.java:31) ~[?:?]
        at com.luckywars.game.setupwizard.WizardListeners.onClick(WizardListeners.java:35) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
        at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?]
        at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?]
        at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?]
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:300) ~[patched_1.8.8.jar:git-PandaSpigot-82]
        ... 17 more

我在错误发生之前尝试打印长方体并且打印正常。

我原以为长方体是空的,但事实并非如此。

我的地图数据类:

`公共类 MapData {

public String name;
public List<String> authors;

public long lastEdit;

public List<Pos> luckyBlocks;

public List<Pos> spawnPoints;
public List<Cuboid> cages;
public Pos spectatorSpawn;

public MapData(String name, List<String> authors, long lastEdit, List<Pos> luckyBlocks, List<Pos> spawnPoints, List<Cuboid> cages, Pos spectatorSpawn) {
    this.name = name;
    this.authors = authors;
    this.lastEdit = lastEdit;
    this.luckyBlocks = luckyBlocks;
    this.spawnPoints = spawnPoints;
    this.cages = cages;
    this.spectatorSpawn = spectatorSpawn;
}

public String getName() {
    return name;
}

public List<Pos> getSpawnPoints() {
    return spawnPoints;
}

public List<Cuboid> getCages() {
    return cages;
}

public List<Pos> getLuckyBlocks() {
    return luckyBlocks;
}

public List<String> getAuthors() {
    return authors;
}

public long getLastEdit() {
    return lastEdit;
}

public void setLastEdit(long lastEdit) {
    this.lastEdit = lastEdit;
}

public Pos getSpectatorSpawn() {
    return spectatorSpawn;
}

public void setSpectatorSpawn(Pos spectatorSpawn) {
    this.spectatorSpawn = spectatorSpawn;
}

}

我的会话类:

addCage方法:

public void addCage() { SelectionManager selectionManager = LuckyWars.getInstance().getSelectionManager(); 选择 selection = selectionManager.getSelection(player.getUniqueId());

    if (selection == null) {
        player.sendMessage(MessageUtils.format("&cYou have not even made any selections at all! make one by using the loc wand!"));
        return;
    }

    Location location1 = selection.getFirstPos();
    Location location2 = selection.getSecondPos();

    if (location1 == null) {
        player.sendMessage(MessageUtils.format("&cYour first pos selection is null!"));
        return;
    }
    if (location2 == null){
        player.sendMessage(MessageUtils.format("&cYour second pos selection is null!"));
        return;
    }

    if (data.cages.size() == GameMode.SOLO.getMaxPlayers()) {
        player.sendMessage(MessageUtils.format("&cYou cant add more than " + GameMode.SOLO.getMaxPlayers() + " cages!"));
        return;
    }

    Cuboid cuboid = new Cuboid(location1, location2, false);
    this.data.getCages().add(cuboid);
    player.sendMessage(MessageUtils.format("&aSuccessfully added a cage!"));
    if (LuckyWars.getInstance().isDebugMessages()) {
        System.out.println(cuboid);
    }
}`

错误的会话行:

if(save){ data.setLastEdit(System.currentTimeMillis()); LuckyWars.getInstance().getMapDB().saveMapData(data.getName(), data); }

java json gson spigot
1个回答
0
投票

这里重要的一行是:

java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.TaskQueue java.util.Timer.queue accessible: module java.base does not "opens java.util" to unnamed module

可能你的一个班级(也许是

Cuboid
)有一个传递性的
java.util.Timer
值,你(不小心?)试图用Gson序列化。因为 Gson 没有
Timer
的内置适配器,所以它尝试使用反射,但在最新的 JDK 版本中对于 JDK 类失败了。一般来说,你应该避免依赖第三方类的基于反射的 Gson 适配器,因为它会让你依赖于那些随时可能改变的类的实现细节。

要解决这个问题,您要么必须编写一个自定义 Gson

TypeAdapter
来序列化
Timer
值,或者将其从序列化中排除(例如,使字段
transient
)。有关详细信息,请参阅故障排除指南

© www.soinside.com 2019 - 2024. All rights reserved.