我工作的一个Java项目,这个项目我做了我第一次尝试科特林内。我开始使用Intellij Idea中提供的JavaToKoltin转换器将一些类转换为Kotlin。其中我的自定义例外现在转换为Kotlin。但是由于这种情况,异常处理不再正确工作。
如果我在java代码中抛出一个自定义异常(例如MyCustomKotlinException.kt
),则不会捕获异常(请参阅下面的代码)。摇篮项目:java.lang.NoClassDefFoundError:科特林/ JVM /内部/内部函数
// Example.java
package foo
import java.util.*;
import java.lang.*;
import java.io.*;
import foo.MyCustomKotlinException;
class Example
{
public static void main (String[] args)
{
try {
// Do some stuff
// if Error
MyCustomKotlinException e = new MyCustomKotlinException("Error Message");
throw e;
} catch (MyCustomKotlinException e) { // <-- THIS PART IS NEVER REACHED
// Handle Exception
} catch (Throwable e) {
e.printStackTrace(); <-- This is catched
} finally {
// Finally ...
}
}
}
所以任何人都可以向我解释为什么这个异常不被捕获。 MyCustomKotlinException
继承自Kotlins RuntimeException
,这只是java.lang.RuntimeException
的别名。
// MyCustomKotlinException.kt
package foo
class MyCustomKotlinException(err: String) : RuntimeException(err)
更新:
我扔部分分成2线(例如创建和投掷),发现问题不是投掷。 try块在实例创建后留下。我的这个Kotlin类的实例创建有什么问题吗?
UPDATE2:
我添加了一个第二catch块与Throwable
和下面的Throwable被捕获。
java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics
...
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
UPDATE3:
改变了标题纠正错误和固定的问题,将所有项目文件的jar(见下面的回答)。 将Kotlin运行库lib添加到gradle对我来说不起作用。
请提供一个完整的[mcve],例如kotlin源代码。 – GhostCat
@GhostCat对你来说就够了吗? – FreshD
它必须足够让人们可以重现问题。看起来像现在。 – GhostCat