java.io.Console support in Eclipse IDE java.io.Console support in Eclipse IDE java java

java.io.Console support in Eclipse IDE


I assume you want to be able to use step-through debugging from Eclipse. You can just run the classes externally by setting the built classes in the bin directories on the JRE classpath.

java -cp workspace\p1\bin;workspace\p2\bin foo.Main

You can debug using the remote debugger and taking advantage of the class files built in your project.

In this example, the Eclipse project structure looks like this:

workspace\project\                 \.classpath                 \.project                 \debug.bat                 \bin\Main.class                 \src\Main.java

1. Start the JVM Console in Debug Mode

debug.bat is a Windows batch file that should be run externally from a cmd.exe console.

@ECHO OFFSET A_PORT=8787SET A_DBG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=%A_PORT%,server=y,suspend=yjava.exe %A_DBG% -cp .\bin Main

In the arguments, the debug port has been set to 8787. The suspend=y argument tells the JVM to wait until the debugger attaches.

2. Create a Debug Launch Configuration

In Eclipse, open the Debug dialog (Run > Open Debug Dialog...) and create a new Remote Java Application configuration with the following settings:

  • Project: your project name
  • Connection Type: Standard (Socket Attach)
  • Host: localhost
  • Port: 8787

3. Debugging

So, all you have to do any time you want to debug the app is:

  • set a break point
  • launch the batch file in a console
  • launch the debug configuration

You can track this issue in bug 122429. You can work round this issue in your application by using an abstraction layer as described here.


The workaround that I use is to just use System.in/System.out instead of Console when using Eclipse. For example, instead of:

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

You can use:

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


The reason this occurs is because eclipse runs your app as a background process and not as a top-level process with a system console.