2015-10-22 17 views
6

ように私は私がコンパイルしてのIntelliJ IDEAでのGradleプラグインを使用して実行しようとしています次のJavaメインクラスがない:のGradleの実行タスクは、入力を受け付けますが、IDEAの実行構成

package com.mikidep.bookshop; 

import java.io.IOException; 
import java.util.Scanner; 

public class Main { 
    public static void main(String[] args) throws IOException { 
     Scanner in = new Scanner(System.in); 
     System.out.print("Inserisci testo qui: "); 
     System.out.println(in.nextLine()); 
     System.out.println("Yee!"); 
    } 
} 

を私のbuild.gradleは次のとおりです。

group 'com.mikidep.bookshop' 
version '1.0-SNAPSHOT' 

apply plugin: 'application' 

mainClassName = "com.mikidep.bookshop.Main" 

sourceCompatibility = 1.5 

repositories { 
    mavenCentral() 
} 

dependencies { 
    testCompile group: 'junit', name: 'junit', version: '4.11' 
} 

run { 
    standardInput = System.in 
} 

を今、私は、端末すべてにgradle run -qを実行した場合、予想通りに動作します。私はいくつかのコンソール入力を行うまで

IDEA Run configuration

すべては大丈夫です。しかし、私はテストの実行に使用したい、このIDEAの実行構成があります。スレッド "メイン" java.util.NoSuchElementExceptionで

例外: com.mikidep.bookshopでjava.util.Scanner.nextLine(Scanner.java:1585)で見つかりませんでしたライン in.nextLine()は、次の例外をスロー.Main.main(Main.java:10)

私もそれをデバッグしようとしましたが、全体の流れが初期化されていなかったようSystem.in内のすべてのフィールドは、ゼロにように見えることに気づきました。誰が何が起こっているのか知っていますか?

EDIT:私はちょうどこれが同様にビルドスクリプトに影響を与えていることを確認:私は、実行タスク

System.out.println("Wait...") 
System.in.read() 
System.out.println("Ok!") 

にこのラインを追加しました。しかしGradleのは、私の入力を待たずに、すぐにこれらの2つの行を出力します。

+0

[IntelliJ IDEAとGradleでデバッグ中にユーザー入力を待つ](http://stackoverflow.com/questions/27267508/wait-for-user-input-while-debugging-on-intellij-idea- and-gradle) – lukeg

答えて

1

System.inは、スクリプトのパラメータではありません。

コマンドラインで、Gradleが期待するパラメータを指定しないので、入力したものの残りを標準入力として使用します。 IDEAでは、標準入力とスクリプトパラメータが分離され、標準入力は実行またはデバッグコンソールウィンドウから取得されます。

+0

私が知っている '-q'は、gradle出力がコンソールを乱雑にするのを防ぐためのものです。私はそれをいくつかの端末に入力すると、私はプログラムを期待しているように戻ってくる、よく認識できるテキストを入力します。 IDEAで実行すると、プログラムは入力を待つことさえなく、例外をスローして終了します。 –

+0

入力を待つ必要があるので、IDEAのバグだと思います。 – JBaruch

+0

また質問にいくつかの情報を追加しました。 –

関連する問題