【发布时间】: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