You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在IntelliJ IDE中使用Scanner类无法控制台输入,程序需手动终止

问题:IntelliJ IDE中使用Scanner类无法在控制台输入,程序持续运行需手动终止
  • 项目结构:Maven
  • 额外信息:使用TestNG测试框架

代码情况

SRC文件夹下的BasicPrograms.java

import java.util.Scanner;

public class BasicPrograms { 
    public void takeInpFrmUser() {
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter the number");
        int num = sc.nextInt();
        System.out.println("User has entered= " + num);
        sc.close();
    }
}

TEST文件夹下的UserInput.java

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class UserInput {
    BasicPrograms basicObj;

    @BeforeClass
    public void createObj() {
        basicObj = new BasicPrograms();
    }

    @Test
    public void verifyUserInput() {
        basicObj.takeInpFrmUser();
    }
}

已尝试操作

查阅Java官方Scanner类文档

预期结果

能够在控制台输入整数并正常输出结果

实际结果

程序持续运行,无法输入内容,需手动终止进程


解决方案

这是TestNG在IntelliJ中运行测试时的常见问题,核心是TestNG默认禁用了测试用例的控制台输入,可通过以下方式解决:

  1. 修改IntelliJ的TestNG运行配置

    • 点击右上角运行按钮旁的下拉框,选择Edit Configurations
    • 找到对应TestNG测试的配置项(比如UserInput类的测试配置)
    • 在Configuration标签页中,勾选Redirect input from选项,选择Console后保存配置
    • 重新运行测试即可正常输入
  2. 避免关闭System.in流
    代码中sc.close()会关闭底层的System.in流,导致后续输入操作失效,测试场景下建议移除该语句:

    public void takeInpFrmUser() {
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter the number");
        int num = sc.nextInt();
        System.out.println("User has entered= " + num);
        // 移除sc.close();
    }
    
  3. 直接运行主类测试(替代方案)
    如果只是验证Scanner功能,可给BasicPrograms添加main方法,直接运行该类而非通过TestNG测试:

    import java.util.Scanner;
    
    public class BasicPrograms { 
        public void takeInpFrmUser() {
            Scanner sc = new Scanner(System.in);
            System.out.println("Please enter the number");
            int num = sc.nextInt();
            System.out.println("User has entered= " + num);
            sc.close();
        }
    
        public static void main(String[] args) {
            new BasicPrograms().takeInpFrmUser();
        }
    }
    

内容的提问来源于stack exchange,提问作者Dhaval

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:52:52