gpt4 book ai didi

java Swing : How to pass value by pressing one button while other button is already pressed

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:01 27 4
gpt4 key购买 nike

我正在使用 Java swing 和 Matlab 开发一个项目。我有一个带有 2 个按钮“运行”和“暂停”的 GUI。我正在使用另外一个 java 程序 (Matlabjavaprog.java),其中运行循环如下:

int pause = 0;
for (int i=0; i<10; i++) {
if (pause == 20000) {
try {
Thread.sleep(pause);
System.out.println("Now delayed for 20s!");
} catch (InterruptedException ie) {}
} else {
proxy.setVariable("n", i);
proxy.eval("n=n+1");
proxy.feval("myfun");
}
}

当我按下“运行”按钮时,else部分就会执行。但我想在这个循环之间按下“暂停”按钮,其中暂停值(20000)将从GUI传递给java程序,并且执行应延迟20000毫秒。但是,在“运行”执行循环之前,我无法按“暂停”按钮。

“运行”按钮:

JButton btnNewButton = new JButton("Run");
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
pauseButton.setEnabled(true);
prog1.main(args); // a java program that calls another program Matlabjavaprog.java (which calls an instance of Matlab)
}
});

“暂停”按钮:

pauseButton = new JButton("Pause");
pauseButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int p =20000;
Matlabjavaprog.getpause(p); // a function in Matlabjavaprog java program that passes pause value from GUI to this program
}
});

实际上,“运行”会创建与 MATLAB 的 TCP 连接,并在其中运行数据集的多个实例。整个过程不能放入线程中,因为它不允许重新连接,因为它已经有一个连接。似乎一旦我按下“运行”,我就无法按下“暂停”,直到运行完成。有没有办法执行“暂停”按钮,可以根据用户需要延迟循环?目前,我无法将暂停值发送到正在运行的程序,即 Matlabjavaprog.java。任何帮助将不胜感激!

最佳答案

如何通过实现 Runnable 将执行放在另一个线程中并使用 AtomicBoolean

例如

AtomicBoolean isPaused = new AtomicBoolean(false);
new Thread(new Runnable(){
public void run(){
while(true){
if(isPaused.get()){
Thread.sleep(20000);
isPaused.set(false);
}
proxy.setVariable("n", i);
proxy.eval("n=n+1");
proxy.feval("myfun");
}
}
}).start()

然后在暂停按钮中,调用一个 setter 来调用 isPause.set(true) ,这应该使其可点击。无论如何,这都是一个开始 - 为了简单起见,我喜欢使用原子在线程之间发送信号。

关于java Swing : How to pass value by pressing one button while other button is already pressed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35018671/

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