我有這樣一段代碼在MainACtivity
類onCreate
方法:如何在啓動線程時更改按鈕的文本?
setContentView(R.layout.activity_main);
Button button1 = (Button)findViewById(R.id.button1);
button1.setText("Start");
final baresipThread thread = new baresipThread();
button1.setOnClickListener(new View.OnClickListener() {
boolean running = false;
@Override
public void onClick(View v) {
if (!running) {
((Button)v).setText("Stop");
thread.start();
running = true;
} else {
thread.kill();
running = false;
((Button)v).setText("Start");
}
}
});
和baresipThread類看起來是這樣的:
package com.tutpro.baresip;
public class baresipThread extends Thread {
public void run() {
baresip_start();
}
public void kill() {
baresip_kill();
}
public native void baresip_start();
public native void baresip_kill();
}
如果我刪除從代碼thread.start()
/thread.kill()
呼叫,文本按鈕每按一次就會切換。但是,如果包含線程調用,當按下按鈕時,按鈕的文本(最初爲Start
)沒有變化。線程啓動正常。
爲什麼不改變文本以及如何使它發生?下面的代碼
有你打過電話按鈕重繪更改文本後的方法? –
看起來像按鈕對象沒有repaint()方法。另外,我的問題確實是,爲什麼在setText(「Stop」)之後調用thread.start()會導致setText(「Stop」)無效。 – Juha
我會關閉這個問題並創建另一個問題。真正的問題是爲什麼調用一個永遠不會從Java線程終止的本地C函數會導致整個應用程序無法響應。 – Juha