否控制台中。 如何让我的JVM控制台?(No Console found. How to get

2019-10-20 07:32发布

这是一个后续问题要这个 。

我昨天问过这个问题,虽然它尚未解决,我试图对代码做一些愚蠢的变化只是使它编译一次(更换console.format()的声明System.out.print语句,并加入null的的第二个参数readLine()方法)。

幸运的是,代码并运行,但它打印No console. (显然是因为JVM没有一个控制台设备。 参考 )

所以,我怎么能得到控制台设备,应该由控制台类的一个对象来表示?


为了方便起见,我加入了代码之后我做了上述傻改变它,使它运行: -

import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

/*
 *  Enter your regex: foo
 *  Enter input string to search: foo
 *  I found the text foo starting at index 0 and ending at index 3.
 * */

public class RegexTestHarness {

    public static void main(String[] args){
        Console console = System.console();
        if (console == null) {
            System.err.println("No console.");
            System.exit(1);
        }
        while (true) {

            Pattern pattern = 
            Pattern.compile(console.readLine("%nEnter your regex: ", null));

            Matcher matcher = 
            pattern.matcher(console.readLine("Enter input string to search: ", null));

            boolean found = false;
            while (matcher.find()) {
                /*console.format("I found the text" +
                    " \"%s\" starting at " +
                    "index %d and ending at index %d.%n",
                    matcher.group(),
                    matcher.start(),
                    matcher.end());*/

                System.out.println("I found the text " + matcher.group() + " starting at index " + matcher.start() + " and ending at index " + matcher.end() + "."); 

                found = true;
            }
            if(!found){
                //console.format("No match found.%n", null);
                System.out.println("No match found."); 
            }
        }
    }
}

Answer 1:

您的应用程序只会有一个控制台设备打开,如果它是从终端开始,没有标准输入和标准输出重定向。 基本上函数isatty()必须返回true。 Windows应用程序通常如果从管理器启动,没有游戏机。 你应该从命令提示符(cmd.exe的)启动它们。



文章来源: No Console found. How to get the console for my JVM?