我正在设计一个打印队列程序,它随机生成打印作业,并根据每个单独的打印作业的时间,将它们“打印”几秒钟,暂停主线程,而另一个线程不断检查用户是否按下了回车键,生成一个新的打印作业添加到主线程中的队列末尾,或“Q”按钮,发出结束程序的信号。这是相关的代码:
Scanner input = new Scanner(System.in);
AdPrint addPrint = new AdPrint();
addPrint.start();
for (int i = 0; i < printQueue.size(); i++)
{
System.out.println("Printing " + i + " of " + printQueue.size()
+ "\n" + printQueue.get(i).getJobTime()
+ " seconds remaining."
+ "\nPlease press \"Enter\" to submit a new print"
+ " job or \"Q\" to quit.");
addPrint.setI(i);
addPrint.setInput(input);
addPrint.setJobGen(jobGen);
addPrint.setPrintQueue(printQueue);
Thread.currentThread().sleep(printQueue.get(i).getJobTime() * 1000);
printQueue.add(addPrint.getPrintQueue().get(i));
addPrint.interrupt();
}
AdPrint(我故意拼错了,因为我在 eclipse 中遇到了另一个问题;我在另一台计算机上的 DropBox 中更改了这个类,因为有一个新副本,eclipseAddPrint出于某种原因无法识别它,所以我不得不重命名该类以使它可以工作,但这不是这里的问题)是在等待期间处理用户输入的单独线程。在我开始之前,我只想注意我最初addPrint.start();在 for 循环中没有interrupt方法,但我意识到会发生什么,然后 java 会在某种失控的反馈循环中创建无限多个并行线程。我只是认为addPrint(实例)的值会改变,但事实并非如此。
现在,我在以下位置收到 NullPointerException if (input.nextLine() != null):
Exception in thread "Thread-0" java.lang.NullPointerException
at AdPrint.run(AdPrint.java:19)
我是线程的新手,在花了一些时间修补这个之后,我想在这里得到一些帮助。为什么我会收到此异常?我如何让这个线程addPrint检查用户是否请求了另一个打印作业?编辑:
我忘了提到我有 AdPrint 的 getter/setter 方法:
public void setInput(Scanner input)
{
this.input = input;
}
相关分类