Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 Android线程未结束。无法再次启动_Java_Android_Multithreading_Java Threads - Fatal编程技术网

Java Android线程未结束。无法再次启动

Java Android线程未结束。无法再次启动,java,android,multithreading,java-threads,Java,Android,Multithreading,Java Threads,在这种情况下,当用户单击按钮时,一个名为“StartThread”的线程将启动,按钮将不可见。三秒钟后,当线程完成其工作时,按钮再次可见。当用户第二次单击按钮时,会在LogCat中显示错误: 代码:- public class MainActivity extends Activity { Handler mHandler; Button button; @Override protected void onCreate(Bundle savedInstanceState) { sup

在这种情况下,当用户单击按钮时,一个名为“StartThread”的线程将启动,按钮将不可见。三秒钟后,当线程完成其工作时,按钮再次可见。当用户第二次单击按钮时,会在LogCat中显示错误:

代码:-

public class MainActivity extends Activity {

Handler mHandler;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = (Button)findViewById(R.id.button);
    mHandler = new Handler(Looper.getMainLooper());

    button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            startAthread.start();
            button.setVisibility(View.INVISIBLE);
        }
    });

}

Thread startAthread = new Thread(new Runnable()
{
    @Override
    public void run()
    {
        try
        {
            Thread.sleep(3000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        mHandler.post(new Runnable()
        {
            @Override
            public void run()
            {
                button.setVisibility(View.VISIBLE);
            }
        });

    }
});
}
01-10 19:45:39.861  22473-22473/com.guptamanish712.threadtest W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418002b8)
01-10 19:45:39.891  22473-22473/com.guptamanish712.threadtest E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalThreadStateException: Thread already started.
            at java.lang.Thread.start(Thread.java:1045)
            at com.guptamanish712.threadtest.MainActivity$1.onClick(MainActivity.java:29)
            at android.view.View.performClick(View.java:4295)
            at android.view.View$PerformClick.run(View.java:17456)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:174)
            at android.app.ActivityThread.main(ActivityThread.java:4952)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
            at dalvik.system.NativeStart.main(Native Method)
Logcat:-

public class MainActivity extends Activity {

Handler mHandler;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button = (Button)findViewById(R.id.button);
    mHandler = new Handler(Looper.getMainLooper());

    button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            startAthread.start();
            button.setVisibility(View.INVISIBLE);
        }
    });

}

Thread startAthread = new Thread(new Runnable()
{
    @Override
    public void run()
    {
        try
        {
            Thread.sleep(3000);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }

        mHandler.post(new Runnable()
        {
            @Override
            public void run()
            {
                button.setVisibility(View.VISIBLE);
            }
        });

    }
});
}
01-10 19:45:39.861  22473-22473/com.guptamanish712.threadtest W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x418002b8)
01-10 19:45:39.891  22473-22473/com.guptamanish712.threadtest E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalThreadStateException: Thread already started.
            at java.lang.Thread.start(Thread.java:1045)
            at com.guptamanish712.threadtest.MainActivity$1.onClick(MainActivity.java:29)
            at android.view.View.performClick(View.java:4295)
            at android.view.View$PerformClick.run(View.java:17456)
            at android.os.Handler.handleCallback(Handler.java:615)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:174)
            at android.app.ActivityThread.main(ActivityThread.java:4952)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
            at dalvik.system.NativeStart.main(Native Method)

它不会在什么之后再次启动…?Java中的线程一旦停止就不能重新启动。当
run()
方法完成执行时,它们停止。在您的示例中,您创建了一次线程,当有人单击按钮时调用start,当有人再次单击按钮时调用start。然后在此活动中如何再次执行相同的工作。我应该用不同的名称但相同的代码再定义一个线程吗?您可以使用mHandler.postDelayed(Runnable,3000)方法实现此逻辑,然后您可以避免该线程。您想运行同一个线程两次吗?如果是,请参见此问题