这是我的代码:
noProxyButton.setOnAction(e -> {
this.setStatusField("Deactivating proxy...");
System.out.println("Deactivating proxy...");
String request = "powershell.exe "
+ "-Command \"Set-ItemProperty "
+ "-path \'HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\' "
+ "ProxyEnable -value 0";
try {
this.runIt(request);
} catch (IOException ex) {
Logger.getLogger(MLSOps.class.getName()).log(Level.SEVERE, null, ex);
}
...
public void setStatusField(String value){
statusField.setText(value);
}
问题在于 setStatusField
在 e
事件结束后调用。输出上的经典打印正在评估并显示“调用 runIt
之前”。
为什么这么晚调用setStatusField
?
最佳答案
只需使用线程即可。不确定从“编程规则”的角度来看它是否“清晰”(也许有人可以回答),但它有效:
Thread t1 = new Thread (new Runnable() {
@Override
public void run() {
MLSOps.setStatusField("Deactivating proxy...");
}
});
t1.start();
Thread t2 = new Thread (new Runnable() {
@Override
public void run() {
try {
runIt();
} catch (IOException ex) {
Logger.getLogger(MLSOps.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
t2.start();
关于java - 在 setOnAction 事件中调用方法并评估命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52294503/