我使用 Eclipse IDE 来开发、编译和运行我的 Java 项目。今天,我尝试使用 java.io.Console
类来管理输出,更重要的是,管理用户输入。
问题在于,当应用程序“通过”Eclipse 运行时,System.console()
返回 null
。 Eclipse 在后台进程上运行程序,而不是我们熟悉的带有控制台窗口的顶级进程。
有没有办法强制 Eclipse 将程序作为顶级进程运行,或者至少创建一个 JVM 可以识别的控制台?否则,我不得不将项目打包并在 Eclipse 外部的命令行环境中运行。
最佳答案
我假设您希望能够在 Eclipse 中使用逐步调试。您可以通过在 JRE 类路径的 bin 目录中设置构建的类来在外部运行这些类。
java -cp workspace\p1\bin;workspace\p2\bin foo.Main
您可以使用远程调试器并利用项目中内置的类文件进行调试。
在本例中,Eclipse 项目结构如下所示:
workspace\project\
\.classpath
\.project
\debug.bat
\bin\Main.class
\src\Main.java
1.在 Debug模式下启动 JVM 控制台
debug.bat 是一个 Windows 批处理文件,应该从 cmd.exe 控制台外部运行。
@ECHO OFF
SET A_PORT=8787
SET A_DBG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=%A_PORT%,server=y,suspend=y
java.exe %A_DBG% -cp .\bin Main
在参数中,调试端口已设置为 8787。 suspend=y 参数告诉 JVM 等待调试器附加。
<强>2。创建调试启动配置
在 Eclipse 中,打开调试对话框(运行 > 打开调试对话框...)并使用以下设置创建一个新的远程 Java 应用程序配置:
- 项目:你的项目名称
- 连接类型:标准(Socket Attach)
- 主机: 本地主机
- 端口: 8787
3.调试
因此,在您想要调试应用程序时,您所要做的就是:
- 设置断点
- 在控制台中启动批处理文件
- 启动调试配置
您可以在 bug 122429 中跟踪此问题.您可以在您的应用程序中使用抽象层来解决此问题,如 here 所述。 .
关于Eclipse IDE 中的 java.io.Console 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/104254/