System.console() returns null

后端 未结 12 842
有刺的猬
有刺的猬 2020-11-22 04:55

I was using readLine of BufferedReader to get input/new password from user, but wanted to mask the password so I am trying to use java.io.Con

相关标签:
12条回答
  • 2020-11-22 05:18

    I believe that in the run configurations for Eclipse, you can configure whether to assign a console or not - ensure this is checked. (It's been a while since I used Eclipse so I can't give specific instructions I'm afraid).

    If that doesn't work, then something that will definitely do this job is starting your application in debug mode, then connect to the process with Eclipse. Search for "eclipse remote debugging" if you're not sure how to do this.

    Furthermore, in general it is a bad idea to require a console to be assigned as this very much impacts the flexibility of your application - as you've just discovered. Many ways of invoking Java will not assign a console, and your application is unusable in these instances (which is bad). Perhaps you could alternatively allow arguments to be specified on the command line. (If you're testing the console input specifically then fair enough, but it would potentially be useful for people to be able to invoke your application from scripts and/or on headless servers, so this sort of flexible design is almost always a good idea. It often leads to better-organised code, too.)

    0 讨论(0)
  • 2020-11-22 05:19

    I also ran into this problem when trying to write a simple command line application.

    Another alternative to creating your own BufferedReader object from System.in is to use java.util.Scanner like this:

    import java.util.Scanner;
    
    Scanner in;
    in = new Scanner(System.in);
    
    String s = in.nextLine();
    

    Of course this will not be a drop-in replacement to Console, but will give you access to a variety of different input functions.

    Here's more documentation on Scanner from Oracle.

    0 讨论(0)
  • 2020-11-22 05:19

    According to the API:

    "If the virtual machine is started from an interactive command line without redirecting the standard input and output streams then its console will exist and will typically be connected to the keyboard and display from which the virtual machine was launched. If the virtual machine is started automatically, for example by a background job scheduler, then it will typically not have a console."

    0 讨论(0)
  • 2020-11-22 05:20

    That is right.

    You will have to run the application outside of Eclipse. Look at the launcher configuration panels within Eclipse and see if you can spot the option that says to run the command in a separate JVM.

    0 讨论(0)
  • 2020-11-22 05:23

    I refered&used formixian's answer shown above. The point is use (black) cmd console to run your Java program as "ojonugwa ochalifu" suggested.

    0 讨论(0)
  • 2020-11-22 05:25

    add -console in your program arguments to start OSGi console

    0 讨论(0)
提交回复
热议问题