猿问

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

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

}


米脂
浏览 162回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答