我正在设计一个打印队列程序,它随机生成打印作业,并根据每个单独的打印作业的时间,将它们“打印”几秒钟,暂停主线程,而另一个线程不断检查用户是否按下了回车键,生成一个新的打印作业添加到主线程中的队列末尾,或“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;}
添加回答
举报
0/150
提交
取消