gpt4 book ai didi

java - 线程化可运行对象方法不响应更改

转载 作者:行者123 更新时间:2023-12-01 09:14:14 25 4
gpt4 key购买 nike

我有一个类“HConnection”,其中包含多种方法,例如 abort();和awaitConnection();

awaitConnection();方法是在我的 SWT Form 主类中使用可运行线程调用的。无论如何,当我 abort() HConnection 时,awaitConnection 并没有被中止,而它应该被中止。

看看我的主要代码的快照:

private HConnection connectie;

private void btnConnect_clicked(SelectionEvent e) {

if (btnNewButton_1.getText().equals("Connect")) {
String Url = combo.getText();
connectie = new HConnection(Url);
connectie.prepare();

new Thread(new Runnable() {
public void run() {
connectie.awaitConnection();

Display.getDefault().asyncExec(new Runnable() {
public void run() {
lblNewLabel_2.setText("Waiting -> client");
if (connectie.getState() == 2) {
lblNewLabel_2.setText("Replacing URL");
}
else {
lblNewLabel_2.setText("Failed");
connectie.abort();
btnNewButton_1.setText("Connect");
}
}
});
if (connectie.getState() == 2) {
// go on

}
}
}).start();

////////

btnNewButton_1.setText("Abort");
}
else if(btnNewButton_1.getText().equals("Abort")) {
connectie.abort();
lblNewLabel_2.setText("Aborted");
btnNewButton_1.setText("Connect");
}

以及 HConnection 的快照:

public void prepare()   {
addToHostsFile("127.0.0.1" + "\t" + domain);
state = 1;
}

public void abort() {
removeFromHostsFile("127.0.0.1" + "\t" + domain);
waitingConnection = false;
HostFileEdited = false;
state = 0;
}

public void awaitConnection() {
if (state == 1) {
waitingConnection = true;
System.out.println("0");
while (/* not found && */ state == 1) {

// code

}
System.out.println("1");
waitingConnection = false;
if (state == 1) state = 2;
}

}

还有一点注意;当我尝试在 thread.start(); 之后直接调用 connectie.abort() 时,abort() 函数确实工作并完成了线程(在上面的代码中的该位置放置了“////////”) )但如果它在应该被调用的地方被调用,它就会做它应该做的事情而

lblNewLabel_2.setText("Aborted");
btnNewButton_1.setText("Connect");

正在按预期完成工作

最佳答案

使你的状态和awaitConnection变得不稳定:

private volatile int state;
private volatile boolean awaitConnection;

关于java - 线程化可运行对象方法不响应更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40693504/

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