如何在调试模式下读取Java中的控制台?

时间:2016-10-19 21:57:30

标签: java intellij-idea

在IntelliJ IDEA中运行以下程序:

package org.stepic.java;

import java.util.ArrayDeque;
import java.util.Iterator;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        ArrayDeque<Integer> deque = new ArrayDeque<>();

        //try (Scanner scan = new Scanner(System.in)) {
        try (Scanner scan = new Scanner("1 2 3 4 5 6 7")) {
            int i = 0;
            while(scan.hasNext()){
                if(scan.hasNextInt()) {
                    Integer number = scan.nextInt();
                    if((i++ % 2) == 1) deque.add(number);
                } else {
                    scan.next();
                }
            }

            Iterator<Integer> it = deque.descendingIterator();
            while(it.hasNext()) {
                Integer num = it.next();
                System.out.printf("%s ", num.toString());
            }
        } catch(Exception e) {
        }
    }
}

如果我运行它,我可以在控制台中输入一些,然后按 Ctrl - D ,它将存储在扫描仪中。如果我在调试器中做同样的事情,IDEA只是跳过行:

Scanner scan = new Scanner(System.in)

我无法输入任何内容。在这种情况下,扫描仪buf为空。如何在调试模式下在控制台中输入文本?

2 个答案:

答案 0 :(得分:0)

Stdin正常在调试模式(F5)下工作

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    if( scan.hasNext() ) {
        System.out.println("Got " + scan.next());
    }
}

它在调试模式下工作,println上有断点。

也许您没注意到在调试模式下[console]不是默认选项卡而您尝试在[调试器]窗口中输入文本?

答案 1 :(得分:0)

我认为您的Variable Watch中有scan.next()或类似内容。删除它,然后它可能正常工作。我在Stack&lt;&gt;()

时遇到了类似的问题