【问题标题】:Consoles in JavaJava 中的控制台
【发布时间】:2013-11-27 15:04:16
【问题描述】:

我确实在理解 Java 中的控制台时遇到了一些严重的问题。我正在运行 Eclipse,我想编写一个小程序,它会向控制台提示一些文本消息,并从中接收一些字符串作为输入参数。问题是:当我运行我的程序时,它会正确打开命令行窗口,但我的输出只打印在 Eclipse-Console 上。 在某种程度上,我确实理解为什么会这样。命令行窗口需要命令,而不仅仅是某种字符串或其他东西。但是我如何设法将我的字符串输出到命令行窗口并从中读取字符串,而不仅仅是命令。 还是我做错了?我是否必须打开另一个“控制台”来提示我的所有消息并且我可以从中读取用户编写的字符串?

这是我用来在启动时打开命令行窗口的代码:

    public static void main(String args[]) throws Exception {
    Process process = new ProcessBuilder(new String[] { "cmd", "/C",
            "start", "cmd" }).start();
    System.out.println(process.waitFor());

编辑:我仍然没有设法让它工作。不知何故,当我编译程序并运行它时,它正确地打开了一个命令窗口,但那里没有发布任何消息。好像 "System.out.println("xxx") 对这个窗口没有任何影响。

【问题讨论】:

  • Eclipse 中基本上会有一个控制台。如果你运行你的程序,它会在同一个控制台上询问/提示一些输入。 Enter 点击后,您将在同一控制台上获得输出。就是这样。。
  • 我想说预期/正常的方式是在从 Eclipse 内部运行时使用 Eclipse 控制台,在从命令行运行时使用命令行控制台。您必须更改任何内容才能使其正常工作,因此我们需要查看您的代码才能知道发生了什么。

标签: java eclipse


【解决方案1】:

您的程序没有指定“控制台”,但有一个stdinstdoutstderr 用于输入、输出和错误输出。当您从 Windows 运行程序时,这些流被绑定到一个命令窗口,如果您在 Eclipse 中运行它,它们将与 Eclipse 控制台相关联。举一个更模糊的例子,如果你通过 ssh 运行它,流将与 ssh 相关联,而 ssh 将与你的命令窗口相关联,依此类推。

所以,你没有做错任何事情,如果你希望 stdout 和 stdin 来自该命令窗口,你只需要从命令行运行程序。

顺便问一下,如何打开命令窗口?

【讨论】:

  • 好吧,当我将程序导出为可执行文件 .jar 时,单击它会打开命令行窗口(程序会自动打开),但窗口中仍然没有显示任何输出,而且它仍然期望来自用户的命令。当我手动打开命令行窗口时,我通过 Windows+R -> "cmd"
  • 好吧,很奇怪。如果您双击并打开一个新的 cmd 窗口,该窗口正在等待输入(即 stdin 与其关联),那么 stdout 和 stderr 应该在那里(即应该出现打印输出)
【解决方案2】:

您可能想通读此页面:

http://pages.cs.wisc.edu/~hasti/cs368/JavaTutorial/NOTES/JavaIO_Scanner.html

基本上,您需要创建输入流,告诉用户输入内容,然后获取输入。例如

private static Scanner newScanner = new Scanner(System.in);

public static void main(String[] args) {

    System.out.println("Put your input here: ");

    String inputValue = newScanner.nextLine(); 

    System.out.println(inputValue);

}

记得导入扫描仪库!

【讨论】:

  • 现在我添加了用于在程序启动时打开命令行窗口的代码。也许这引起了我的麻烦?当然,当我在 Eclipse 中运行我的程序时,我可以使用 Eclipse 控制台。但是当我将它导出为可执行的 .jar 并运行程序时,它会打开命令行,但里面什么也没有发生。
  • 按照这个例子:stackoverflow.com/questions/17265883/… 我能够通过命令行毫无问题地运行它。我希望这会有所帮助
猜你喜欢
  • 2014-09-28
  • 2011-06-18
  • 2012-07-25
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 2019-06-13
  • 1970-01-01
相关资源
最近更新 更多