当我尝试使用java.lang.System.console()时,会得到一个空指针。我仍然可以从in读取并写入out,但这仅在我直接从IDE运行时有效。当我直接运行.jar文件时,什么都不发生。如何创建一个控制台,就像在Java中使用std::cout看到的那样?
编辑:我希望只是创建一个控制台,而不是了解为什么我没有一个,因为我需要一个来操作我的程序。
你是如何运行JAR文件的?如果是在Windows资源管理器中双击图标,则会出现预期的行为,正如Kelly所说,但如果是从命令行启动,则不会。
根据API中的控制台入口(我强调):
虚拟机是否拥有控制台取决于底层平台以及虚拟机被调用的方式。如果从交互式命令行启动虚拟机而没有重定向标准输入和输出流,则其控制台将存在,并且通常会连接到启动虚拟机的键盘和显示器。如果虚拟机是自动启动的,例如由后台作业调度程序,则通常不会有控制台。
java.lang.System.out
和java.lang.System.in
是控制台访问的输入/输出流。Java不会创建“控制台”,但允许您与操作系统提供的IO流交互。
当您从jar文件中运行它(例如从文件夹中单击它),您将获得GUI的I/O流,这些流不会在任何地方显示。
尝试创建一个批处理文件,并在其中使用“java -jar”命令。当您运行批处理文件时,您应该看到命令窗口。我假设这里是Windows。另一种方法是直接运行带有保持窗口打开的参数的cmd.exe,即“cmd.exe /c”。
不要直接运行jar文件,打开控制台(您没有指定操作系统,但这将是Windows上的命令行和*Nix上的控制台,或者在OS X上的终端)。然后运行java -jar /path/to/your.jar
。
Java中std::cout
的等效物应该是System.out
,您可能已经知道了。
编辑:关于您的编辑,有代码可以实现此功能。例如,您可以使用Swing。甚至有一个StackOverflow答案,其中包含多个可工作的代码示例。