Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法在GraalVM本机映像中使用kotlin.random.random_Java_Kotlin_Graalvm_Graalvm Native Image - Fatal编程技术网

Java 有没有办法在GraalVM本机映像中使用kotlin.random.random

Java 有没有办法在GraalVM本机映像中使用kotlin.random.random,java,kotlin,graalvm,graalvm-native-image,Java,Kotlin,Graalvm,Graalvm Native Image,我尝试用Kotlin构建一个简单的应用程序,在GraalVM本机映像上使用Kotlin.random.random类。 但这在运行时失败。见下文 作为一种变通方法,您可以使用java标准java.util.Random类 有人能告诉我如何使用Kotlin类型吗 App.kt import kotlin.random.Random fun main(args: Array<String>) { println(Random.nextInt()) } 运行时错误 Excepti

我尝试用Kotlin构建一个简单的应用程序,在GraalVM本机映像上使用Kotlin.random.random类。 但这在运行时失败。见下文

作为一种变通方法,您可以使用java标准java.util.Random类

有人能告诉我如何使用Kotlin类型吗

App.kt

import kotlin.random.Random

fun main(args: Array<String>) {
   println(Random.nextInt())
}
运行时错误

Exception in thread "main" java.lang.ExceptionInInitializerError

at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:290)

at java.lang.Class.ensureInitialized(DynamicHub.java:475)

at kotlin.random.Random.<clinit>(Random.kt:242)

at com.oracle.svm.core.hub.ClassInitializationInfo.invokeClassInitializer(ClassInitializationInfo.java:350)

at com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270)

at com.example.AppKt.main(App.kt:8)

Caused by: java.lang.InstantiationException: Type `kotlin.internal.jdk8.JDK8PlatformImplementations` can not be instantiated reflectively as it does not have a no-parameter constructor or the no-parameter constructor has not been added explicitly to the native image.

at java.lang.Class.newInstance(DynamicHub.java:793)

at kotlin.internal.PlatformImplementationsKt.<clinit>(PlatformImplementations.kt:41)

... 6 more
线程“main”java.lang.ExceptionInInitializeError中的异常 位于com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:290) ensureInitialized(DynamicHub.java:475) 在科特林。随机。随机。(随机。kt:242) 位于com.oracle.svm.core.hub.ClassInitializationInfo.InvokeClassiInitializer(ClassInitializationInfo.java:350) 位于com.oracle.svm.core.hub.ClassInitializationInfo.initialize(ClassInitializationInfo.java:270) 在com.example.AppKt.main上(App.kt:8) 原因:java.lang.InstanceException:Type`kotlin.internal.jdk8.jdk8PlatformImplements`无法反射式实例化,因为它没有无参数构造函数,或者没有将无参数构造函数显式添加到本机映像中。 位于java.lang.Class.newInstance(DynamicHub.java:793) 在科特林。内部。平台实施SKT。(平台实施kt:41) ... 还有6个 最小工作示例项目

您必须修改 将以下内容添加到本机映像参数:

-H:ReflectionConfigurationFiles=/path/to/reflectconfig
并将受影响类的规则放入reflectionconfig文件:

[{
    "name" : "kotlin.internal.jdk8.JDK8PlatformImplementations",
    "allDeclaredConstructors" : true,
    "allPublicConstructors" : true,
    "allDeclaredFields" : true,
    "allPublicFields" : true,
    "allDeclaredMethods" : true,
    "allPublicMethods" : true
}]

或者,您也可以使用相同的文件指定init方法,

我没有使用Kotlin,但我怀疑您需要在
本机映像调用中包含Kotlin库。
看起来Kotlin正在使用反射,您可能必须使用。
[{
    "name" : "kotlin.internal.jdk8.JDK8PlatformImplementations",
    "allDeclaredConstructors" : true,
    "allPublicConstructors" : true,
    "allDeclaredFields" : true,
    "allPublicFields" : true,
    "allDeclaredMethods" : true,
    "allPublicMethods" : true
}]