2017-05-26 15 views
8

私はJavaプロジェクトに取り組んでいます。このプロジェクトでは、私はKotlinで初めて試しました。私はIntellij Ideaで提供されているJavaToKoltinコンバータを使って、いくつかのクラスをKotlinに変換し始めました。とりわけ私のカスタム例外は今ではKotlinに変換されています。しかし、これで例外処理は正しく機能しません。
Javaコード内にカスタム例外(など)を投げた場合、例外はキャッチされません(下記のコードを参照)。Gradleプロジェクト:java.lang.NoClassDefFoundError:kotlin/jvm/internal/Intrinsics

// 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クラスのインスタンス作成で何か問題はありますか?

アップデート2:
私はThrowableで二catchブロックを追加し、次のThrowableがキャッチされます。

java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics 
... 
Caused by: java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics 

Update3と:
はエラーと(下記お答え参照)ジャーにすべてのプロジェクトファイルを追加することで、固定の問題を修正するために、タイトルを変更しました。 Kotlinランタイムライブラリをgradleに追加することはできません。

+0

たとえば、そのkotlinソースコードなどの完全な[mcve]を入力してください。 – GhostCat

+0

@GhostCatはこれで十分ですか? – FreshD

+0

人々が問題を再現できるほど十分である必要があります。今のように見える。 – GhostCat

答えて

4

と実行することで、これが問題であることを確認できます。すべてのプロジェクトファイルをjarに追加すると、問題が解決しました。 build.gradle

jar { 
    manifest { 
     attributes ... 
    } 
    // This line of code recursively collects and copies all of a project's files 
    // and adds them to the JAR itself. One can extend this task, to skip certain 
    // files or particular types at will 
    from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } 
} 
0

私はあなたが使用しているシステムkotlin-runtimeライブラリ

チェックせずにKotlinコードを実行し、neccesary jarファイルを追加しようとしていると言うつもりです。プロジェクトを.jarファイルにパッケージ化し、runtime library

+0

ランタイムライブラリを私の 'build.gradle'(' compile "org.jetbrains.kotlin:kotlin-runtime:$ kotlin_version" ')に追加しようとしましたが、私にとっては役に立ちません。 – FreshD

2

あなたのプロジェクトをkotlinで設定する必要があります。 だから、Androidのメーカーで:

  1. クリックツール上=> kotlin =>ダイアログのチェックに続いてプロジェクトに

  2. をkotlin設定:すべてのモジュールが

  3. と選択kotlinファイルを含むバージョン

  4. press ok

完了。

2

コンソールでAntを使用して自分のプロジェクトをコンパイルするのと同じ問題がありました。私はkotlin-stdlib.jarをクラスパスに編集しましたが、問題はなくなりました。

関連する問題