Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.io.Console support in Eclipse IDE

I use the Eclipse IDE to develop, compile, and run my Java projects. Today, I'm trying to use the java.io.Console class to manage output and, more importantly, user input.

The problem is that System.console() returns null when an application is run "through" Eclipse. Eclipse run the program on a background process, rather than a top-level process with the console window we're familiar with.

Is there a way to force Eclipse to run the program as a top level process, or at least create a Console that the JVM will recognize? Otherwise, I'm forced to jar the project up and run on a command-line environment external to Eclipse.

like image 635
Ross Avatar asked Sep 19 '08 18:09

Ross


People also ask

How do I show console output in Eclipse?

From the menu bar, Window → Show View → Console. Alternately, use the keyboard shortcut: Mac: Option - Command - Q , then C , or. Windows: Alt - Shift - Q , then C.

What is Java IO console?

The Java. io. Console class provides methods to access the character-based console device, if any, associated with the current Java virtual machine. The Console class was added to java.io by JDK 6.


Video Answer


2 Answers

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 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 

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.

like image 65
McDowell Avatar answered Sep 30 '22 18:09

McDowell


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(); 
like image 40
Laplie Anderson Avatar answered Sep 30 '22 16:09

Laplie Anderson