Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程执行_Java_Android - Fatal编程技术网

Java 线程执行

Java 线程执行,java,android,Java,Android,我有两个线程t1和t2。每个都有代码 getWindow().getDecorView().setBackgroundColor(Color.GREEN); 问题是该行对线程t2和主线程不起作用 代码如下: package arj.developer.jaadu; import android.app.Activity; import android.graphics.Color; import android.media.MediaPlayer; import android.os.Bun

我有两个线程t1和t2。每个都有代码

getWindow().getDecorView().setBackgroundColor(Color.GREEN);
问题是该行对线程t2和主线程不起作用

代码如下:

package arj.developer.jaadu;

import android.app.Activity;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {
    MediaPlayer mp1,mp2;
    View v;
    Thread t1 = new Thread(){
        public void run(){
            getWindow().getDecorView().setBackgroundColor(Color.CYAN);          
            mp1=MediaPlayer.create(MainActivity.this,R.raw.jaad);
            mp1.start();
        }
    };
    Thread t2= new Thread(){
        public void run(){
            getWindow().getDecorView().setBackgroundColor(Color.MAGENTA);
            mp2=MediaPlayer.create(MainActivity.this,R.raw.jaad);
            mp1.stop();
            mp2.start();
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().getDecorView().setBackgroundColor(Color.GREEN);
        try {
            t1.sleep(10000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        t1.start();
        try {
            t2.sleep(30000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        t2.start();
    }
}
导致当前线程睡眠,因此您的
t1.sleep(10000)
t2.sleep(10000)
都导致主线程睡眠! 将sleep方法移动到t1&t2的
run()
method,您可能应该运行
getWindow().getDecorView().setBackgroundColor(\u color)也在主线程中

package arj.developer.jaadu;

import android.app.Activity;
import android.graphics.Color;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {
    MediaPlayer mp1,mp2;
    View v;
    Thread t1 = new Thread(){
        public void run(){
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            runOnUiThread(new Runnable() {

            @Override
            public void run() {
                                getWindow().getDecorView().setBackgroundColor(Color.CYAN);   
            }
        });       
            mp1=MediaPlayer.create(MainActivity.this,R.raw.jaad);
            mp1.start();
            try {
                Thread.sleep(30000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            runOnUiThread(new Runnable() {

            @Override
            public void run() {
                                getWindow().getDecorView().setBackgroundColor(Color.MAGENTA);
            }
        });   
            mp2=MediaPlayer.create(MainActivity.this,R.raw.jaad);
            mp1.stop();
            mp2.start();
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().getDecorView().setBackgroundColor(Color.GREEN);
        t1.start();
    }
}

只是出于好奇-目标到底是什么?@BorisStrandjev我希望屏幕背景每隔几秒钟就改变一次,背景音乐是什么?你需要两个线程吗?如果你切换背景20次,你会有20个线程吗?@BorisStrandjev我是个新手..需要一个解决方案,先生!!我建议您使用单个
处理程序
。请参阅此处的教程:为什么t1.sleep()或t2.sleep()会导致主线程睡眠?因为sleep()是一个静态方法,会导致当前正在运行的线程睡眠,所以从哪个线程实例调用它根本不重要。参见文档:如果我写t1.start();t2.start();在onCreate()中;然后仅执行线程t2;我希望在执行Main、t1和t2Yes之间有一些延迟,所以按照我的建议修改程序。我尝试过修改它…但有时线程t1只执行,有时只有t2和主线程..我希望所有线程都有一些延迟执行..Plzz代码片段帮助!!