Can';无法在Windows控制台中使用基本的Kotlin协同程序示例
我在用科特林做实验。通过Android进行测试既慢又麻烦,所以我尝试只使用Windows控制台版本。这似乎没有那么好的记录 基本的hello world运行良好,因此我开始: 我使用的是Kotlin1.3.50,我下载了kotlinx-coroutines-core-1.3.0.jar,并将其直接放入我的soucre文件中 我用:Can';无法在Windows控制台中使用基本的Kotlin协同程序示例,kotlin,kotlin-coroutines,Kotlin,Kotlin Coroutines,我在用科特林做实验。通过Android进行测试既慢又麻烦,所以我尝试只使用Windows控制台版本。这似乎没有那么好的记录 基本的hello world运行良好,因此我开始: 我使用的是Kotlin1.3.50,我下载了kotlinx-coroutines-core-1.3.0.jar,并将其直接放入我的soucre文件中 我用: kotlinc-kotlintest.kt-cp-kotlinx-coroutines-core-1.3.0.jar-包含运行时 我尝试使用: kotlin Kotl
kotlinc-kotlintest.kt-cp-kotlinx-coroutines-core-1.3.0.jar-包含运行时
我尝试使用:kotlin KotlintestKt
我得到以下错误输出:
Exception in thread "main" java.lang.NoClassDefFoundError: kotlinx/coroutines/GlobalScope
at KotlintestKt.main(kotlintest.kt:4)
at KotlintestKt.main(kotlintest.kt)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.jetbrains.kotlin.runner.AbstractRunner.run(runners.kt:61)
at org.jetbrains.kotlin.runner.Main.run(Main.kt:110)
at org.jetbrains.kotlin.runner.Main.main(Main.kt:120)
Caused by: java.lang.ClassNotFoundException: kotlinx.coroutines.GlobalScope
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:436)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 9 more
也有类似的问题,但答案似乎只涉及Gradle或IntelliJ IDEA,我没有使用。我基本上没有Java或Kotlin方面的经验,但有几十年的编程经验。编译器需要访问coroutines jar文件,以了解您使用的类是否存在,它们有哪些方法等,从而能够检查您的代码是否正确,并生成字节码。这就是为什么要传递
-cp-kotlinx-coroutines-core-1.3.0.jar
。类似地,在运行时,JVM需要访问协同路由jar文件才能执行类包含的代码。但在执行代码时不传递任何类路径。所以它找不到他们。所以你得到了这个例外。@JBNizet:谢谢。正如我在问题末尾提到的,我没有Java经验,我所关注的关于Windows的Kotlin文章中也没有提到过“类路径”。我看看我是否能找到答案…@AjahnCharles:现在我甚至无法编译:警告:类路径入口指向一个不存在的位置:kotlin-coroutines-core-1.3.0.jar kotlintest.kt:4:5:错误:未解析的引用:GlobalScope
@jbniset:这似乎有效:kotlin-cp kotlinx-coroutines-core-1.3.0.jar;。KotlintestKt
,虽然我真的不明白为什么会这样是必需的,但在我把coroutine的东西放进去之前不是。可能是因为协程库在同一个目录中??如果不指定类路径,它默认为当前目录。因此它可以找到您的类(在当前目录中),但不能找到协同路由类(不在当前目录中,但在jar文件中)。如果指定一个类路径,那么它会在指定的类路径中查找类。您需要类路径中的jar,因为您的代码使用该jar中的类,并且您需要类路径中的当前目录,因为您自己的类位于当前目录中,并且也需要找到并执行。
Exception in thread "main" java.lang.NoClassDefFoundError: kotlinx/coroutines/GlobalScope
at KotlintestKt.main(kotlintest.kt:4)
at KotlintestKt.main(kotlintest.kt)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at org.jetbrains.kotlin.runner.AbstractRunner.run(runners.kt:61)
at org.jetbrains.kotlin.runner.Main.run(Main.kt:110)
at org.jetbrains.kotlin.runner.Main.main(Main.kt:120)
Caused by: java.lang.ClassNotFoundException: kotlinx.coroutines.GlobalScope
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:436)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 9 more