在Java中创建控制台

7

当我尝试使用java.lang.System.console()时,会得到一个空指针。我仍然可以从in读取并写入out,但这仅在我直接从IDE运行时有效。当我直接运行.jar文件时,什么都不发生。如何创建一个控制台,就像在Java中使用std::cout看到的那样?

编辑:我希望只是创建一个控制台,而不是了解为什么我没有一个,因为我需要一个来操作我的程序。


你能贴出你的一段代码吗?通常一个SSCCE(http://sscce.org/)非常有帮助。 - Kylar
5个回答

6
也许您正在尝试通过在jar文件上双击来获取控制台。
尝试创建一个批处理文件,为您打开控制台。
但是,您可以使用Swing创建控制台,并将标准输入/输出重定向到那里。
来源:Create Java console inside a GUI panel

5

你是如何运行JAR文件的?如果是在Windows资源管理器中双击图标,则会出现预期的行为,正如Kelly所说,但如果是从命令行启动,则不会。

根据API中的控制台入口(我强调):

虚拟机是否拥有控制台取决于底层平台以及虚拟机被调用的方式。如果从交互式命令行启动虚拟机而没有重定向标准输入和输出流,则其控制台将存在,并且通常会连接到启动虚拟机的键盘和显示器。如果虚拟机是自动启动的,例如由后台作业调度程序,则通常不会有控制台。


如果你使用"javaw MyClass"来调用虚拟机,例如,你将没有控制台,但是如果你在命令行中使用"java MyClass"来调用它,那么你就会有一个控制台(在1.6或更高版本的JVM上)。 - Justin

4

java.lang.System.outjava.lang.System.in是控制台访问的输入/输出流。Java不会创建“控制台”,但允许您与操作系统提供的IO流交互。

当您从jar文件中运行它(例如从文件夹中单击它),您将获得GUI的I/O流,这些流不会在任何地方显示。

尝试创建一个批处理文件,并在其中使用“java -jar”命令。当您运行批处理文件时,您应该看到命令窗口。我假设这里是Windows。另一种方法是直接运行带有保持窗口打开的参数的cmd.exe,即“cmd.exe /c”。


0

不要直接运行jar文件,打开控制台(您没有指定操作系统,但这将是Windows上的命令行和*Nix上的控制台,或者在OS X上的终端)。然后运行java -jar /path/to/your.jar

Java中std::cout的等效物应该是System.out,您可能已经知道了。

编辑:关于您的编辑,有代码可以实现此功能。例如,您可以使用Swing。甚至有一个StackOverflow答案,其中包含多个可工作的代码示例。


-1

请参考JConsole,它是Java中的通用控制台,例如Groovy使用。或者直接查看Groovy。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接