java - Gradle 运行任务在控制台中运行时接受输入,但不作为 IDEA 运行配置

标签 java intellij-idea gradle

我有以下 Java 主类,我正在尝试使用 IntelliJ IDEA 中的 Gradle 插件编译和运行它:

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 运行配置来测试运行:

IDEA Run configuration

一切正常,直到我进行一些控制台输入。 in.nextLine() 抛出以下异常:

Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Scanner.java:1585) at com.mikidep.bookshop.Main.main(Main.java:10)

我还尝试对其进行调试,并注意到 System.in 中的所有字段似乎都清零了,就像整个流都没有被初始化一样。有人知道发生了什么吗?

编辑:我刚刚验证这也会影响构建脚本:我将这些行添加到运行任务

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

但 Gradle 会立即打印这两行,而无需等待我的输入。

最佳答案

System.in 不是脚本参数。

在命令行中,由于您没有指定 Gradle 期望的任何参数,它只使用您键入的剩余内容作为标准输入。在 IDEA 中,标准输入和脚本参数是分开的,标准输入来自运行或调试控制台窗口。

关于java - Gradle 运行任务在控制台中运行时接受输入,但不作为 IDEA 运行配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33289818/

相关文章:

java - 重构方法/构造函数参数以在 IntelliJ 中插入整个对象

intellij-idea - Lombok 插件与 2018.1 Intellij Idea 不兼容

build - 寻找真实世界的 Gradle 示例

android - 使用 Spock 和 Java 8 运行 Android 应用程序的问题

java - 数组列表最大数量

java - 休息概念 : Should the system authenticate every request of a session

java - 即使在编译器选项中禁用 javadoc 之后,Eclipse 仍提示 Javadoc,并且不一致

java - Jsoup 从 <br> 获取内容

intellij-idea - 如何查看 WebStorm 7(或 IntelliJ)中语法错误的实时列表?

android - 我安装了最新版本的 Android Studio。我在同步 gradle 时遇到错误