我有一个包含多种方法(如abort())的类“HConnection”。和awaitConnection();线程可运行对象方法对变化没有响应
awaitConnection();方法在我的SWT Form主类中使用可运行线程调用。无论如何,当我放弃()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");
正在做他们的工作预期
也许你的else块内run()方法没有得到执行 –
@VikasSachdeva没有多数民众赞成没有问题 – JonasAnon
有时线程不会立即开始,所以当你在你的线程调用'start'之后调用中止,'awaitConnection()'甚至可能不会被调用 –