在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默认禁用了测试用例的控制台输入,可通过以下方式解决:
修改IntelliJ的TestNG运行配置
- 点击右上角运行按钮旁的下拉框,选择
Edit Configurations - 找到对应TestNG测试的配置项(比如
UserInput类的测试配置) - 在
Configuration标签页中,勾选Redirect input from选项,选择Console后保存配置 - 重新运行测试即可正常输入
- 点击右上角运行按钮旁的下拉框,选择
避免关闭
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(); }直接运行主类测试(替代方案)
如果只是验证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
相关产品推荐
相关产品推荐

