【问题标题】:What is causing the Exception in thread "pool-1-thread-2" (NullPointerException) [duplicate]是什么导致线程“pool-1-thread-2”中的异常(NullPointerException)[重复]
【发布时间】:2017-09-10 01:33:23
【问题描述】:

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

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

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

这也没有帮助。字符串在同一个地方初始化 作为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

这里我正在初始化处理线程的执行器:

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));
        }

String questions[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]created:

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();
                        }

NullPointerException 发生在 HandleValidation 类中:

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;

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

【问题讨论】:

  • 你在哪里设置答案?答案似乎为空
  • read = new BufferedReader(new InputStreamReader(hv.getInputStream())); answer = read.readLine();
  • @RealSkeptic 我已经尝试在教程的帮助下解决问题。我创建了一个构造函数,但后来我不知道如何调用该类:`theExecutor.execute(new Broadcaster (connection);` 我还创建了一个 setter:public void setQuestions(String[] questions) { this.questions[1] = questions[1]; } 这也没有帮助。字符串已初始化在与questions[0] 相同的位置。我可以在控制台中打印出 `questions[1]。它从 ArrayList 获取它的值,但我不知道如何将该值传递给 HandleValidation 类。

标签: java multithreading nullpointerexception webserver


【解决方案1】:

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

我的建议是将该变量声明在 for 范围之外。

【讨论】:

    猜你喜欢
    • 2015-04-27
    • 2018-04-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多