gpt4 book ai didi

java - Swing 中的 Wait() 语句

转载 作者:行者123 更新时间:2023-12-01 17:19:51 27 4
gpt4 key购买 nike

我有 2 个按钮。第一个启动线程,第二个让它等待。第一个按钮工作正常,但第二个按钮不想停止第一个按钮线程。怎么了?如何让它停止?

package SwingExp;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class WhichButton implements ActionListener {

JLabel jLab, testLab = new JLabel();
JFrame jfrm = new JFrame("Button example");
JButton firstButton = new JButton("First"), secondButton = new JButton("Second");

WhichButton() {


jfrm.setLayout(new FlowLayout());
jfrm.setSize(220, 90);

jfrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

firstButton.addActionListener(this);
secondButton.addActionListener(this);
jfrm.add(firstButton);
jfrm.add(secondButton);

jLab = new JLabel("Press button");
jfrm.add(jLab);
jfrm.add(testLab);

jfrm.setVisible(true);
}

class SimpleThread extends Thread {
Thread t;
boolean suspendFlag;

SimpleThread() {
t = new Thread(this, "settingThread");
t.start();

}

public void run() {


for (int i = 0; i <= 10; i++) {
synchronized (this) {
while (suspendFlag) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}

testLab.setText(Integer.toString(i));

try {
Thread.sleep(1000);
} catch (InterruptedException e) {

}

}

firstButton.setEnabled(true);
testLab.setText("Completed.");
}

synchronized void setSuspendFlag(boolean suspendFlag) {
this.suspendFlag = suspendFlag;
}


}


public void actionPerformed(ActionEvent e) {

SimpleThread st = new SimpleThread();

if (e.getActionCommand().equals("First")) {
jLab.setText("First");
firstButton.setEnabled(false);
st.setSuspendFlag(false);

} else {
st.setSuspendFlag(true);
}
}


public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

public void run() {
new WhichButton();
}
});
}


}

我试图使用 interrupt() 方法,但它让我多了一个线程或类似的东西。

最佳答案

您需要在setSuspendFlag()方法中notify() hibernate 线程。否则,线程将永远阻塞在 wait() 调用中。

此外,每次按下按钮时,您都会创建一个新的 SimpleThread 实例。您需要将 SimpleThread 实例设为成员变量,并且只创建一次。

关于java - Swing 中的 Wait() 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19502748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com