java如何通过按键和释放使循环开始和结束?
这是我的密码。。。如何使其工作,以便在用户按住按钮时运行循环,并在用户释放按钮时停止
public void nextPrimeNum()
{
x = false;
int b = 2;
ArrayList<Integer> next = new ArrayList<Integer>();
while(x)
{
next = factors(b);
if(next.size()==2)
{
System.out.println(b);
}
b++;
}
System.out.println("End");
}
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == 401)
{
x = true;
}
}
public void keyRealesed(KeyEvent e)
{
if(e.getKeyCode() == 402)
{
x = false;
}
}
# 1 楼答案
GUI和多线程编程本质上是困难的
因此,这是尽可能简单的,不会太多违反最佳实践
你需要几样东西:
Thread
用于打印素数:它的
run
方法永远循环,但在未按下空格键时暂停(有关更多信息,请参见Defining and Starting a Thread)
KeyListener
:事件处理方法旨在快速完成,以便其他事件 (如移动、调整大小和关闭帧)仍然可以快速处理
(见How to Write a Key Listener 和The Event Dispatch Thread了解更多信息)
JFrame
),用于添加KeyListener
synchronized
、notify
和wait
) 以便主打印在keyPressed
上开始/继续 并暂停在keyReleased
(详见Guarded Blocks)
initGUI
初始化并启动整个GUI(详见Initial Threads)
# 2 楼答案
所以,答案是——这很复杂。它涵盖了广泛的主题,如并发性(一般)、GUI开发、特定API(Swing)的最佳实践,通过阅读各种教程(和实验)可以更好地更详细地介绍这些主题
该示例提供了两种执行“循环”的方法(在
CalculateWorker
类的doInBackground
方法中提供)您可以按住
JButton
或按住[kbd]空格[kbd]栏,两者都会导致“主循环”运行,并用结果更新JTextArea
当然,我总是先寻找最难理解的解决方案(讽刺)
虽然降低复杂性“可能”是可能的,但该示例提供了一些“最佳实践”概念,您最好学习和理解这些概念
根据所使用的API,解决方案也可能有所不同,因此,对于特定的API选择,它是“最简单”的解决方案
Java不能做到这一点——它的控制台支持充其量只是初步的,不支持“按键/释放”操作的概念(因为它在单个线程中运行,否则就不可能做到)
您可能会尝试“有些”解决方案,但它们需要一个链接到本机二进制文件的第三方库来实现,这将(可能)减少它将运行的平台数量