【问题标题】:Why does my Java program work in console and not in Eclipse?为什么我的 Java 程序在控制台中运行而不在 Eclipse 中运行?
【发布时间】:2014-05-01 14:05:51
【问题描述】:

我想知道为什么我的 Java 程序在我这样做时可以在控制台中运行:

javac Main.java

java 主要

...而不是在 Eclipse 中,因为我有这个错误:

线程“main”中的异常 java.lang.NullPointerException 在 codePin.main.main(main.java:48) --> char passwordArray[] = console.readPassword("输入密码:");

这是我的代码:

package codePin;

import java.io.*;
import java.util.*;

public class main {


    static public boolean readPinsData(File dataFile, ArrayList<Integer> data) {
        boolean err = false;
        try {
            Scanner scanner = new Scanner(dataFile);
            String line;
            while (scanner.hasNext()) {
                line = scanner.nextLine();
                try {
                    data.add(Integer.parseInt(line));
                } catch (NumberFormatException e) {
                    e.printStackTrace();
                    err = true;
                }
            }
            scanner.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            err = true;
        }

        return err;
    }

    public static void main(String[] args) {


        System.out.println("-----------------------");
        System.out.println("APPLICATIONS BESOINS");
        System.out.println("-----------------------");
        Console console = System.console();

        System.out.println(console == null);

        int pinSize = 0;
        int nbTry = 0;
        boolean authenticated = false;


        do {
            do {

                char passwordArray[] = console.readPassword("Enter pin: "); //This is the line causing the error 
                pinSize = passwordArray.length;

                if (pinSize != 4) { 

                    System.out.println("Pin must be 4 digits");
                } else {
                    System.out.println("Checking...");
                }

                ArrayList<Integer> pins = new ArrayList<Integer>(); 
                readPinsData(new File("bdd.txt"), pins); 



                String[] thePins = new String[pins.size()];
                for (int i = 0; i < thePins.length; i++) {
                    thePins[i] = pins.get(i).toString();
                }

                String passEntered = String.valueOf(passwordArray);

                for (int i = 0; i < thePins.length; i++) {                      
                    if (passEntered.equals(thePins[i]) && pinSize == 4) {
                        System.out.println(":)");
                        authenticated = true;
                        break;
                    }
                }

            } while (pinSize != 4); 
            if (!authenticated && pinSize == 4) { 

                System.out.println(":(");
                nbTry++;
            }
        } while (nbTry < 3 && !authenticated);
    }
}

如您所见,我在 public static void main 方法的开头添加了 System.out.println(console == null); 只是为了检查,它实际上在控制台中返回 true。

所以我的问题是:如何在 Eclipse 中初始化控制台以便我的代码可以工作? 谢谢

【问题讨论】:

  • 我添加了导致错误的行。
  • 感谢 JP Moresmau,我尝试按照链接中的说明进行操作,但它不起作用。我仍然有这个错误,无法通过这种方式进行调试。

标签: java eclipse terminal console


【解决方案1】:

这是因为System.console() 将返回与当前 Java 虚拟机关联的唯一控制台对象(如果有),而 eclipse 没有唯一控制台。

您应该尝试使用ScannerSystem.in 来获取控制台输入

【讨论】:

  • 我不明白如何在我的程序中替换它。我这样做时出错了。
  • 例如,您可以使用Scanner scanner = new Scanner(System.in); String password = scanner.next();
  • 可以在输入码前加一行System.out.print("Enter pin:");
  • 是的,我就是这么做的,对不起,我的问题很愚蠢。
  • @FlorentP 没关系 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
相关资源
最近更新 更多