我有一个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)