gpt4 book ai didi

java - 线程 "Thread-0"java.lang.reflect.InaccessibleObjectException 中出现异常

转载 作者:行者123 更新时间:2023-12-02 03:46:32 27 4
gpt4 key购买 nike

尝试在我的 java 项目上运行服务器和客户端,该项目由 CLI 和 GUI 制作的棋盘游戏组成。不幸的是,我在添加用户名后遇到了此错误:

Exception in thread "Thread-0" java.lang.reflect.InaccessibleObjectException: Unable to make field private float javafx.scene.paint.Color.red accessible: module javafx.graphics does not "opens javafx.scene.paint" to module gson

这是总错误:

Exception in thread "Thread-0" java.lang.reflect.InaccessibleObjectException: Unable to make field private float javafx.scene.paint.Color.red accessible: module javafx.graphics does not "opens javafx.scene.paint" to module gson
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:341)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:281)
at java.base/java.lang.reflect.Field.checkCanSetAccessible(Field.java:176)
at java.base/java.lang.reflect.Field.setAccessible(Field.java:170)
at gson@2.8.5/com.google.gson.internal.reflect.UnsafeReflectionAccessor.makeAccessible(UnsafeReflectionAccessor.java:44)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:159)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
at gson@2.8.5/com.google.gson.Gson.getAdapter(Gson.java:458)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
at gson@2.8.5/com.google.gson.Gson.getAdapter(Gson.java:458)
at gson@2.8.5/com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
at gson@2.8.5/com.google.gson.Gson.getAdapter(Gson.java:458)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
at gson@2.8.5/com.google.gson.Gson.getAdapter(Gson.java:458)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
at gson@2.8.5/com.google.gson.Gson.getAdapter(Gson.java:458)
at gson@2.8.5/com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
at gson@2.8.5/com.google.gson.Gson.getAdapter(Gson.java:458)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
at gson@2.8.5/com.google.gson.Gson.getAdapter(Gson.java:458)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
at gson@2.8.5/com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
at gson@2.8.5/com.google.gson.Gson.getAdapter(Gson.java:458)
at gson@2.8.5/com.google.gson.Gson.fromJson(Gson.java:926)
at gson@2.8.5/com.google.gson.Gson.fromJson(Gson.java:892)
at gson@2.8.5/com.google.gson.Gson.fromJson(Gson.java:841)
at gson@2.8.5/com.google.gson.Gson.fromJson(Gson.java:813)
at project/controller.JsonUnwrapper.sendJson(JsonUnwrapper.java:99)
at project/network.Socket.JsonRouterSocket.run(JsonRouterSocket.java:55)
at java.base/java.lang.Thread.run(Thread.java:835)

不知何故,javafx 和 GSON 之间似乎存在冲突。有趣的是,我使用 CLI(不需要 javafx)而不是 GUI 来运行服务器和客户端。假设 Gson 应该返回一些信息(包括颜色),但是当调用时!我什至没有执行应该返回一些 oinfo 的命令!

可以使用 RMI 或套接字进行通信,但错误仍然存​​在!

此外,该项目是由我和另外两个人制作的。其中一个使用 Linux,另一个使用 Windows 10(如我),但他们都没有这个问题!

最佳答案

此类错误的发生是由于 java 9 中的模块化造成的。

该错误表明 gson 模块想要使用反射访问 javafx.scene.paint.Color 类的字段。在java 8中,这工作得很好,因为反射甚至可以用来使私有(private)字段公开,但是当使用java 9时,对反射有一些新的限制,这会导致这样的错误一个。

如所解释的 here ,在 java 9 中,您无法使用反射来访问模块的类型,该类型不是由模块导出的,因此反射(如 gson 中使用的)将不再起作用。

此问题的解决方案可能是以下之一:

  • 使用java 8并且不进行模块化(如果您的项目可能的话)
  • 使用命令行选项 --add-opens它打开模块的包,因此反射应该可以再次使用
  • 打开module-info.java文件中的模块(这在您的情况下不起作用,因为您无权访问javafx的module-info.java;只是为了完整性而提到)
  • CLASSPATH而不是MODULEPATH中添加库(javafx和gson),这将导致兼容模式,其中反射也应该是可能的。

因为你提到的另外两个开发人员没有这个问题,我假设他们使用 java 8 或者将库放入 CLASSPATH 中,因为这只是项目设置中的更改,而不是代码中的更改。所以这可以解释为什么只有你面临这个问题。

关于java - 线程 "Thread-0"java.lang.reflect.InaccessibleObjectException 中出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56803554/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com