Java Android线程似乎不起作用
在我现在正在使用的调谐器应用程序中,我想实现一个指示器,显示是否播放了正确的音调。为此,我实现了指示器的颜色只有在我保持音高至少2秒时才会改变Java Android线程似乎不起作用,java,android,android-studio,Java,Android,Android Studio,在我现在正在使用的调谐器应用程序中,我想实现一个指示器,显示是否播放了正确的音调。为此,我实现了指示器的颜色只有在我保持音高至少2秒时才会改变 public void thr(final double v1, final double v2) { new Thread() { @Override public void run() { super.run(); int i = 0;
public void thr(final double v1, final double v2) {
new Thread() {
@Override
public void run() {
super.run();
int i = 0;
while (pitchInHz >= v1 && pitchInHz < v2) {
if(i == 20){ //2 Sekunden
imageView.setBackgroundColor(getResources().getColor(holo_green_light));
}else {
imageView.setBackgroundColor(getResources().getColor(darker_gray));
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
}
}
running = false;
}
}.start();
public void thr(最终双倍v1,最终双倍v2){
新线程(){
@凌驾
公开募捐{
super.run();
int i=0;
而(pitchInHz>=v1&&pitchInHz
每次我的应用程序尝试使用线程时,应用程序都会崩溃。
为什么会发生这种情况
if(pitchInHz >= 72.41 && pitchInHz < 92.41) {
//e
noteText.setText("e"); //this is working
if(!running) {
thr(72.41, 92.41);
running = true;
}
if(pitchInHz>=72.41&&pitchInHz<92.41){
//e
noteText.setText(“e”);//这正在工作
如果(!正在运行){
thr(72.41,92.41);
运行=真;
}
我猜想这是因为您试图从不同于主线程的线程访问视图,而您不能这样做
试着像这样跑步:
public void thr(final double v1, final double v2) {
new Thread() {
@Override
public void run() {
super.run();
int i = 0;
while (pitchInHz >= v1 && pitchInHz < v2) {
if(i == 20){ //2 Sekunden
runOnUiThread(new Runnable() {
@override
public void run() {
imageView.setBackgroundColor(getResources().getColor(holo_green_light));
}
})
}else {
runOnUiThread(new Runnable() {
@override
public void run() {
imageView.setBackgroundColor(getResources().getColor(darker_gray));
}
})
try {
sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
i++;
}
}
running = false;
}
}.start();
public void thr(最终双倍v1,最终双倍v2){
新线程(){
@凌驾
公开募捐{
super.run();
int i=0;
而(pitchInHz>=v1&&pitchInHz
错误消息是什么?为什么后台线程是必需的?显然这可以用更可靠的方法完成??