为了账号安全,请及时绑定邮箱和手机立即绑定

当循环在 main 中运行时,如何实现一个单独的线程来评估用户输入?

当循环在 main 中运行时,如何实现一个单独的线程来评估用户输入?

米脂 2021-07-08 09:11:33
我正在设计一个打印队列程序,它随机生成打印作业,并根据每个单独的打印作业的时间,将它们“打印”几秒钟,暂停主线程,而另一个线程不断检查用户是否按下了回车键,生成一个新的打印作业添加到主线程中的队列末尾,或“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;}
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信