是什么导致了线程" pool-1-thread-2" (空指针异常)

时间:2017-04-13 19:45:24

标签: java multithreading nullpointerexception webserver

我正在创建一个多线程Web服务器。当我运行客户端时,我收到一个NullPointException。为什么会发生这种情况以及可以采取哪些措施来解决它?

  

关于我应该阅读上述教程的建议。我有   试图借助它来解决问题。我创造了一个   构造函数,但后来我不知道如何调用类: theExecutor.execute(new Broadcaster (connection);

     

我还创建了一个setter:public void setQuestions(String[] questions) { this.questions[1] = questions[1];}

     

这也没有帮助。 String在同一个地方初始化   为questions[0]。我可以在控制台中打印出questions[1]。它   从ArrayList中获取它的值,但我不知道如何传递它   HandleValidation类的值。这似乎是个问题。   如果我在教程中遗漏了一些明显的解决方案,请告诉我!

在这里,您可以阅读异常消息和堆栈跟踪:

Exception in thread "pool-1-thread-2" java.lang.NullPointerException
at HandlleValidation.run(QuizServer.java:121)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745

这里我正在初始化处理线程的Executor:

public class QuizServer {
public static void main(String[] args) throws IOException {

ExecutorService theExecutor = Executors.newFixedThreadPool(10000);
    ServerSocket quizSocket = new ServerSocket(serverPort);

    try {
        while (true) {  //Skriver ut While True
            Socket connection = quizSocket.accept();
            theExecutor.execute(new Broadcaster(connection));
            theExecutor.execute(new HandlleValidation(connection));
        }

字符串问题[1]的起源在Broadcaster类中:

我使用get和set方法使其他内部类可以使用

String questions[];

static class Broadcaster extends Thread {

    String quizFile = "src/qa.txt";
    private Socket connection;

    private PrintStream write;
    private String answer;
    private String questions[];
    int points = 0;

    public String[] getQuestions() {
        return questions;
    }
  

以下是创建的字符串questions[0]questions[1]

while (true) {

                    for (String string : questionsList) {
                        String[] questions = string.split("/");
                        write.println(questions[0]);  //Printing out in client.
                        try {
                            Thread.sleep(4000); //"Sleeping" between the lines.
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }

HandleValidation类中出现NullPointerException:

  

class HandlleValidation extends Thread {

问题是由这一行引起的:

  if (answer.equals(questions[1])) {
                points++;
                writer.println("RÄTT SVAR! Du har " + points + " poäng");

塞特:

public void setQuestions(String[] questions) {
    this.questions = questions;
  

我试图尽可能少地编写代码来描述   问题。如果需要,我可以提供更多信息!

1 个答案:

答案 0 :(得分:1)

我在for (String string: questionsList) {的上下文中看到变量,在另一个时刻你在if (answer.equals (questions [1])) {中使用它:在其他情况下,在其他范围内。

我的建议是在 for 范围内声明该变量。