- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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/
我遇到过这个 html: 上面的html和这个有什么区别: 最佳答案 来自MDN page on the tag : 对于 type 的属性标签,可能的值是: 提交:按钮将表单数据提交给服务器
Button button= (Button) findViewbyID(R.id.button); 和 Button button = new Button(this); 有什么区别? 最佳答案 有
我是一名优秀的程序员,十分优秀!