2017-04-02 1 views
2
switch (readChoice()) { 
    //options 
} 

private static int readChoice() { 
    String input; 
    int choice = -1; 
    try { 
     input = scanner.next(); 
     choice = Integer.parseInt(input); 
    } catch (NumberFormatException e) { 
     logger.error("Error while trying to read choice from the console", e); 
     } 
    } 
    return choice; 

} 

このコードをjavacでビルドすると、すべて正常に動作します。しかし、私はGradleので建てるのコードを実行しようとすると、私はこのなぜjavacとgradleでビルドされた同じコードが異なるのでしょうか?

Exception in thread "main" java.util.NoSuchElementException 
    at java.util.Scanner.throwFor(Scanner.java:862) 
    at java.util.Scanner.next(Scanner.java:1371) 
    at edu.java.core.cinema.Main.readChoice(Main.java:207) 
    at edu.java.core.cinema.Main.main(Main.java:42) 

42を取得 - スイッチ、207はそこにある - scanner.next)は(そこにあります。 スキャナは何も読み取らないときに選択肢を読み込もうとします。 私はちょうどgradleを学び始めたので、おそらく私は間違って建物を作りました。 私が構築し、Gradleのラッパーで、実行プロジェクト

$ gradle wrapper --gradle-version 3.4 
$ ./gradlew build 
$ ./gradlew run 

UPDATE:あなたのGradleのビルドファイルで build.gradleファイルがあり

apply plugin: 'idea' 
apply plugin: 'java' 
apply plugin: 'application' 

mainClassName = 'edu.java.core.cinema.Main' 

repositories { 
    mavenCentral() 
} 

jar { 
    baseName = 'lab2' 
    version = '0.1.0' 
} 

sourceSets.main.java.srcDirs = ["src"] 

sourceCompatibility = 1.8 
targetCompatibility = 1.8 

dependencies { 
    compile group: 'com.google.code.gson', name: 'gson', version: '2.8.0' 

    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.2' 

    compile group: 'ch.qos.logback', name: 'logback-core', version: '1.2.2' 

    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' 

} 
+0

Gradleがこれを実行すると、入力を要求しません。 –

+0

@ cricket_007どういう意味ですか? –

+0

'scanner.next()'は一時停止し、端末の入力を待ちます –

答えて

3

は「Gradleのをリダイレクトする

run { 
    standardInput = System.in 
} 

を追加入力 "をsystem.inに設定します。あなたが空でないと、入力を読み込もうとすると失敗します。

関連する問題