Ich habe dieses Stück Code in onCreate
Methode der MainACtivity
Klasse:Wie ändert man den Text der Schaltfläche beim Starten eines Threads?
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");
}
}
});
und baresipThread Klasse sieht wie folgt aus:
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();
}
Wenn ich thread.start()
/thread.kill()
Anrufe aus dem Code, Text des entfernen Die Taste wechselt jedes Mal, wenn ich sie drücke. Aber wenn die Thread-Aufrufe enthalten sind, gibt es keine Änderung im Text (zunächst Start
) der Schaltfläche, wenn ich es drücke. Der Thread wird gestartet.
Warum ändert sich der Text nicht und wie kann er umgesetzt werden?
haben Sie versucht, nach dem Text ändern Tasten neu streichen Methode aufrufen? –
Sieht so aus, als hätte das Schaltflächenobjekt keine repaint() -Methode. Meine Frage ist auch, warum bewirkt das Aufrufen von thread.start() nach setText ("Stop"), dass setText ("Stop") keine Wirkung hat. – Juha
Ich werde diese Frage schließen und eine andere machen. Die eigentliche Frage ist, warum das Aufrufen einer nativen C-Funktion, die niemals mit dem Java-Thread endet, dazu führt, dass die gesamte Anwendung nicht mehr reagiert. – Juha