为什么我的 Gradle 的 Kotlin DSL 代码在我的 Java 项目中没有启用 System.in?

Why does my Kotlin DSL code for Gradle not enable System.in in my Java project?

提问人:Confused 提问时间:7/27/2023 最后编辑:Confused 更新时间:7/28/2023 访问量:101

问:

我一直在尝试在 Java 中使用 Scanner 编写一个简单的应用程序,但遇到了问题。无论如何,我都会不断得到扫描程序抛出的 NoSuchElementException。

这是我的完整错误、代码和我的 build.gradle.kts :

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.base/java.util.Scanner.nextLine(Scanner.java:1651)
    at App.main(App.java:11)

法典:

public class App {

    public static void main(String[] args) {

        // creates an object of Scanner
        Scanner input = new Scanner(System.in);

        System.out.print("Enter your name: ");

        // takes input from the keyboard
        String name = input.nextLine();

        // prints the name
        System.out.println("My name is " + name);

    }
}

建。格拉德尔。KTS :

/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java application project to get you started.
 * For more details on building Java & JVM projects, please refer to https://docs.gradle.org/8.2.1/userguide/building_java_projects.html in the Gradle documentation.
 */

repositories {
    // Use Maven Central for resolving dependencies.
    mavenCentral()
}

dependencies {
    // Use JUnit Jupiter for testing.
    testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")

    testRuntimeOnly("org.junit.platform:junit-platform-launcher")

    // This dependency is used by the application.
    implementation("com.google.guava:guava:31.1-jre")
}

// Apply a specific Java toolchain to ease working on different environments.
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(17))
    }
}

application {
    // Define the main class for the application.
    mainClass.set("project.App")
}

tasks.named<Test>("test") {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}

plugins {
    application
}

tasks.named<JavaExec>("run") {
    standardInput = System.`in`
}

我更改了几次代码,尝试使用 Buffered Reader,但无法获得输入。我以为这会是我的代码有问题,但由于我是 Gradle 的新手,我开始探索这是我设置 Gradle 的方式有问题的可能性。我找到了这个线程,并尝试复制和粘贴其他人认为对他们有用的 kotlin 代码。浏览文档,似乎是正确的。即使使用这个新的代码片段(在 build.gradle.kts 文件的底部),我仍然得到 NoSuchElementExceptions 并且无法获得用户输入。我在 vscode 中使用 gradle 扩展运行我的项目,但在 windows 命令行的命令提示符(gradle 运行)中运行它时遇到了同样的问题。

Java Kotlin Gradle 输入

评论

2赞 aled 7/27/2023
您忘记在问题中添加重要信息:完整的错误(只有异常名称不符合条件)以及如何执行 Java 应用程序。
0赞 Confused 7/27/2023
@aled现在已经将该信息添加到问题中
0赞 aled 7/27/2023
你如何在命令行中运行它?您执行的实际命令行是什么?
0赞 Confused 7/28/2023
@aled也添加到问题底部(gradle run)

答:

0赞 Confused 7/28/2023 #1

这是我运行它的方式的问题。使用左侧边栏上的 VSCODE gradle 菜单导致了错误,当我使用 cmd 行运行时,它也不起作用,但它在 powershell 中有效。所有这些都使用相同的“gradle run”命令。谢谢你为我指明了这个方向。