eclipse IDE 中的 java.io.Console 支持

2022-08-31 09:52:37

我使用 Eclipse IDE 来开发、编译和运行我的 Java 项目。今天,我尝试使用该类来管理输出,更重要的是,管理用户输入。java.io.Console

问题是,当应用程序“通过”Eclipse 运行时,它会返回。Eclipse 在后台进程上运行程序,而不是使用我们熟悉的控制台窗口的顶级进程。System.console()null

有没有办法强制Eclipse将程序作为顶级进程运行,或者至少创建一个JVM可以识别的控制台?否则,我被迫将项目启动并在 Eclipse 外部的命令行环境中运行。


答案 1

我假设您希望能够使用 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. 以调试方式启动 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

在参数中,调试端口已设置为 8787suspend=y 参数告诉 JVM 等待调试器附加。

2. 创建调试启动配置2.

在 Eclipse 中,打开“调试”对话框(“运行>打开调试对话框...”),然后使用以下设置创建新的远程 Java 应用程序配置:

  • 项目:您的项目名称
  • 连接类型:标准(插座连接)
  • 主机:本地主机
  • 端口:8787

3. 调试

因此,每当您想要调试应用程序时,您所要做的就是:

  • 设置断点
  • 在控制台中启动批处理文件
  • 启动调试配置

您可以在 bug 122429 中跟踪此问题。您可以通过使用抽象层在应用程序中解决此问题,如此所述。


答案 2

我使用的解决方法是在使用 Eclipse 时只使用 System.in/System.out 而不是 Console。例如,而不是:

String line = System.console().readLine();

您可以使用:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = bufferedReader.readLine();

推荐