尝试迁移到新的游戏版本2.6.3,但在应用程序启动时迁移后,我有如下例外:
[DEBUG] p.s.a.i.n.u.i.PlatformDependent0 - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable
java.lang.ClassNotFoundException: jdk.internal.misc.Unsafe
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at play.shaded.ahc.io.netty.util.internal.PlatformDependent0$6.run(PlatformDependent0.java:290)
at java.security.AccessController.doPrivileged(Native Method)
at play.shaded.ahc.io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:283)
at play.shaded.ahc.io.netty.util.internal.PlatformDependent.getSystemClassLoader(PlatformDependent.java:637)
at play.shaded.ahc.io.netty.util.internal.PlatformDependent.isAndroid0(PlatformDependent.java:661)
at play.shaded.ahc.io.netty.util.internal.PlatformDependent.<clinit>(PlatformDependent.java:65
获得一些如何解决它的想法真的很棒。
答案 0 :(得分:0)
迁移前您使用的是哪个版本的游戏。在我看来,Play WS迁移中的问题。
at play.shaded.ahc.io.netty.util.internal.PlatformDependent0.<clinit>(PlatformDependent0.java:283)
at play.shaded.ahc.io.netty.util.internal.PlatformDependent.getSystemClassLoader(PlatformDependent.java:637)
at play.shaded.ahc.io.netty.util.internal.PlatformDependent.isAndroid0(PlatformDependent.java:661)
这些是Play Standalone WS的例外。 (StandaloneAhcWSClient.class)
我不建议在Play项目中使用Play Standalone WS。此库(Play Standalone WS)在非播放项目中使用。
当然你可以忽略这个例外。
final String name = "wsclient";
ActorSystem system = ActorSystem.create(name);
system.registerOnTermination(() -> System.exit(0));
final ActorMaterializerSettings settings = ActorMaterializerSettings.create(system);
final ActorMaterializer materializer = ActorMaterializer.create(settings, system, name);
// Create the WS client from the application.conf file, the current classloader and materializer.
StandaloneAhcWSClient client = StandaloneAhcWSClient.create(
AhcWSClientConfigFactory.forConfig(ConfigFactory.load(), system.getClass().getClassLoader()),
materializer
);
或创建
// Create the WS client from custom config
StandaloneAhcWSClient client = StandaloneAhcWSClient.create(
AhcWSClientConfigFactory.forClientConfig(WSClientConfig.apply(
...
)),
materializer
);
libraryDependencies += ws
这包括play-ahc-ws模块,该模块使用Play Dependency Injection绑定和组件,配置以及更好地集成它所需的任何其他内容来包装独立版本。
如果你想使用缓存支持,你需要添加ws,ehcache并启用和配置缓存:
libraryDependencies += ws
libraryDependencies += ehcache
答案 1 :(得分:0)
为什么要创建WS客户端的手动实例?你应该简单地@Inject WSClient,并使用它。
答案 2 :(得分:0)
根据链接:https://github.com/netty/netty/issues/6855,将netty版本升级到4.1.12.Final将解决此问题。升级到4.1.14.Final后,我也面临类似问题得到修复。