我的启动画面启动时java.lang.UnsupportedOperationException

时间:2011-11-06 00:41:27

标签: java android

当我的启动画面启动时,我在logcat中遇到错误:

11-06 02:36:45.450: E/global(4184): Deprecated Thread methods are not supported.
11-06 02:36:45.450: E/global(4184): java.lang.UnsupportedOperationException
11-06 02:36:45.450: E/global(4184):     at java.lang.VMThread.stop(VMThread.java:85)
11-06 02:36:45.450: E/global(4184):     at java.lang.Thread.stop(Thread.java:1280)
11-06 02:36:45.450: E/global(4184):     at java.lang.Thread.stop(Thread.java:1247)
11-06 02:36:45.450: E/global(4184):     at com.example.kostas.splash$1.run(splash.java:38)

这是我的班级:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        // thread for displaying the SplashScreen
        Thread splashTread = new Thread() {
            @Override
            public void run() {
                try {
                    int waited = 0;
                    while(_active && (waited < _splashTime)) {
                        sleep(100);
                        if(_active) {
                            waited += 100;
                        } 
                    }
                } catch(InterruptedException e) {
                    // do nothing
                } finally {
                    finish();
                    startActivity(new Intent("com.example.kostas.main"));
                    stop();
                }
            }
        };
        splashTread.start();
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            _active = false;
        }
        return true;
    }

第38行是stop();

我的应用程序启动没有问题,但我想解决它..我试图删除“停止();”但我也得到另一个错误..

11-06 02:44:56.321: E/(32599): onResume() check 0
11-06 02:44:56.321: E/(32599): onResume() check 1
11-06 02:44:56.321: E/Launcher(32599): setWindowOpaque()
11-06 02:44:56.341: E/(32599): onResume() check 2, mRestoring : false
11-06 02:44:56.341: E/(32599): onResume() check 3
11-06 02:44:56.341: E/(32599): onResume() check 4
11-06 02:44:56.345: E/(32599): onResume() check 5

感谢

3 个答案:

答案 0 :(得分:7)

答案在错误消息中:不推荐使用Thread.stop(),Android不支持弃用的方法。

也许您可以尝试在onCreate中使用Thread.sleep()代替超时。

答案 1 :(得分:2)

Thread.stop()已被弃用一段时间了:

  

这种方法本质上是不安全的。使用Thread.stop停止一个线程   使它解锁它锁定的所有监视器(作为   未经检查的ThreadDeath异常传播的自然结果   堆栈)。如果以前受这些对象保护的任何对象   监视器处于不一致状态,受损物体变为   其他线程可见,可能导致任意行为。   停止的许多用法应该由仅修改一些的代码替换   变量,表示目标线程应该停止运行。该   目标线程应定期检查此变量,并从中返回   如果变量指示它,则以有序的方式运行它的方法   是停止运行。如果目标线程等待很长时间(在a   例如,条件变量,应该使用中断方法   打断等待。

简而言之,您不应该致电stop()。如果您在删除stop()时添加了有关其他错误的详细信息,也许有人也可以帮助解决该问题。

答案 2 :(得分:1)

thread.stop() is deprecated method so you have to remove that line from your code.