追踪NullPoInterException背后的原因.但是我该如何解决



我有一个nullpointerexception,我已经调试了代码并能够跟踪问题,但是我该如何解决?

最小测试用例:

    ExecutorService theExecutor = Executors.newFixedThreadPool(10000); //Skapar nya Threads, samt begränsar antalet.
    ServerSocket quizSocket = new ServerSocket(serverPort);
    try {
        while (true) {  //Skriver ut While True
            Socket connection = quizSocket.accept();
            theExecutor.execute(new Broadcaster(connection));
        }
    } finally {
        quizSocket.close();
    }
}

广播公司类。问题发生的地方:

 public static class Broadcaster extends Thread {
    String quizFile = "src/qa.txt";  // Format of text: Vad heter äventyrets hjälte?/Frodo
    private Socket connection;
    private PrintStream write;
    private String qString;
    private String answer;
    private String question;   // (Debug message) question: null
    int points = 0;
    public Broadcaster(Socket connection) {
        this.connection = connection;
    }
    @Override
    public void run() {
        try {
            write = new PrintStream(connection.getOutputStream());
            //Skriva till klienten.
            List<String> questionsList = new ArrayList<>();
            try (Stream<String> questionsStream = Files.lines(Paths.get(quizFile))) {  //Reading from text file
                questionsList = questionsStream
                        .parallel()
                        .collect(Collectors.toList());
                Collections.shuffle(questionsList);  //Randomizing the Strings.
              while (true) {
    for (String qString : questionsList) {
    String[] questions = qString.split("/");  //Splitting to question[0] and [1]
    write.println(questions[0]);  //Printing out [0]. Has a valid value
    question = questions[1].toLowerCase(); //question = null. question[1] "Sam"

即使question[1]不是,字符串问题仍然为null。NullPoInterException是事实!这意味着此变量以后为getter设置为null值:

   public void setQuestion(String question) {
   this.question = question;

我想声明一个变量,并以question[1].toLowerCase的值而不会引起NullPoInterException。然后,我想生成一个带有此变量的设置器。但是我该怎么办?在上一篇文章中,我收到了重复的警告,并建议遵循本教程。现在我已经做到了,这就是我想到的。仍然需要建议如何解决实际问题!我从这里去哪里?

有关更多信息,请访问此帖子!

toLowerCase()需要本地化信息,因为高案例转换为特定于区域。无参数的toLowerCase()使用默认场所的规则将其转换为较低情况。当默认场所有问题时,可能会提出NullPointerException

使用明确的语言环境参数解决问题:toLowerCase(Locale.ENGLISH)

最新更新