我正在创建一个多线程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;
我试图尽可能少地编写代码来描述 问题。如果需要,我可以提供更多信息!
答案 0 :(得分:1)
我在for (String string: questionsList) {
的上下文中看到变量,在另一个时刻你在if (answer.equals (questions [1])) {
中使用它:在其他情况下,在其他范围内。
我的建议是在 for
范围内声明该变量。