启动无限循环后,我无法关闭JFrame。
我想停止无限循环使用停止按钮。
我用开始按钮开始一个无限循环。我想用“停止”按钮关闭那个回路。
>
if(stop.getModel(). isP的()){中断;}不工作
actionListener用于识别按钮单击并在循环也不起作用时使用中断语句终止
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class NewClass1 {
private String arg = "";
public NewClass1()
{
JFrame frame = new JFrame("Datacolor software automate");
JButton stop = new JButton("STOP");
stop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae)
{
arg = (String)ae.getActionCommand();
System.out.println(arg);
}
});
JButton button = new JButton("Start");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
int i = 0;
while (true)
{
try {
System.out.println(i);
i++;
if(arg.equals("STOP"))
{
break;
}
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
}
});
frame.add(button);
frame.add(stop);
frame.setLayout(new FlowLayout());
frame.setSize(300,300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run()
{
new NewClass1();
}
});
}
}
点击停止按钮,无限循环必须终止。在使用start Button启动无限循环后,我无法使用JFrame中的任何按钮。
首先,你不能点击“停止”按钮,这是因为你在事件调度线程中运行了一个大任务(代码的while(true)
部分),这将导致整个GUI冻结。
为了避免这种情况,并使其发挥作用,你将不得不使用SwingWorker。一个类,允许您在后台运行长时间/繁重的任务,并(可选)在GUI中发布它们。
然后,如果你想取消这个SwingWorker,调用它的cancel()
方法就足够了。
看看下面的例子:
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
public class NewClass1 {
private String arg = "";
private SwingWorker<Void, Integer> worker;
public NewClass1() {
JFrame frame = new JFrame("Datacolor software automate");
JButton stop = new JButton("STOP");
stop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
worker.cancel(true);
}
});
JButton button = new JButton("Start");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
initializeWorker();
worker.execute();
}
});
frame.add(button);
frame.add(stop);
frame.setLayout(new FlowLayout());
frame.setSize(300, 300);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void initializeWorker() {
worker = new SwingWorker<Void, Integer>() {
@Override
protected Void doInBackground() throws Exception {
int i = 0;
while (!isCancelled()) {
i++;
publish(i); // give this i to "process" method
}
return null;
}
@Override
protected void process(List<Integer> chunks) {
int i = chunks.get(0);
System.out.println(i);
}
};
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new NewClass1());
}
}
我有一个程序,它每秒钟响一次,直到停止。问题是,在我按下“开始”并发出嘟嘟声后,我无法单击“停止”按钮,因为窗口冻结。欢迎任何帮助。
问题内容: 因此,我有一个Tkinter GUI,其中有两个简单的选项,即开始和停止按钮。我已经定义了GUI布局: 此处的“开始”按钮运行无限循环扫描,而“停止”按钮在按下时应会中断: 但是,当我按下“开始”按钮时,它总是被按下(假定由于无限循环)。但是,我 无法单击“停止”按钮 来打破while循环。 问题答案: 您不能在Tkinter事件循环所处的同一线程中启动循环。这样做将阻塞Tkinter
我正在尝试做一个数字猜测游戏,如果用户匹配他们赢得现金的幸运数字,游戏将继续进行,直到他们用完现金。他们每打一轮都要付赌注。每一轮都会产生一个新的随机数。 我只想使用一个输入。当我把输入放在循环中,循环无限停止循环,当我把它放在循环外,它无限开始循环。我该怎么阻止这一切?我需要向while循环添加什么?我尝试突破,但我想继续比赛,直到钱用完。 我只想使用一个输入,但是当我把输入带出循环(lucky
问题内容: 有没有一种方法可以停止执行无限循环的线程? 问题答案: 是的,您可以将替换(或在逻辑上)。 这样,当任务取消时,循环将终止。 循环看起来像这样: 使用应该是这样的:
不知道如何阻止这个while循环无限重复。我使用检查用户输入是否为int。如果没有输入int值,则循环将无限重复。
问题内容: 我想如果用户按下主页按钮,我的服务将停止,这是我的代码,但对我不起作用,请帮助我: 谢谢 问题答案: 如果您试图确保该服务仅在相关活动可见时运行,则更好的解决方案是在用户正在运行的任何活动的onPause()方法中停止该服务。这样,当用户按下“返回”时和当用户按下“主页”时,将处理事件。 同样,您可以将服务绑定到一个或多个活动。当绑定到绑定服务的所有活动停止时,绑定服务将被销毁。