启动启动屏幕时的java.lang.UnsupportedOperationException
启动启动屏幕时,logcat中出现错误:启动启动屏幕时的java.lang.UnsupportedOperationException,java,android,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(VMThr
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;
}
谢谢已经有一段时间不推荐使用了:
这种方法本质上是不安全的。使用thread.stop停止线程
使其解锁所有已锁定的监视器(作为
未经检查的ThreadDeath异常传播的自然结果
向上)。如果以前受这些保护的任何对象
监视器处于不一致的状态,损坏的对象变为
对其他线程可见,可能导致任意行为。
stop的许多用法应该被简单地修改某些代码的代码所取代
变量,指示目标线程应停止运行。这个
目标线程应定期检查此变量,并从
如果变量指示
就是停止跑步。如果目标线程等待很长时间(在
例如,条件变量),应使用中断方法
打断等待
简而言之,您不应该调用stop()
。如果您在删除stop()
时添加了一些关于其他错误的详细信息,也许有人也可以帮助您解决这个问题。已经有一段时间不推荐使用了:
这种方法本质上是不安全的。使用thread.stop停止线程
使其解锁所有已锁定的监视器(作为
未经检查的ThreadDeath异常传播的自然结果
向上)。如果以前受这些保护的任何对象
监视器处于不一致的状态,损坏的对象变为
对其他线程可见,可能导致任意行为。
stop的许多用法应该被简单地修改某些代码的代码所取代
变量,指示目标线程应停止运行。这个
目标线程应定期检查此变量,并从
如果变量指示
就是停止跑步。如果目标线程等待很长时间(在
例如,条件变量),应使用中断方法
打断等待
简而言之,您不应该调用
stop()
。如果您在删除stop()
时添加了一些关于其他错误的详细信息,也许有人也可以帮助您解决这个问题。答案在错误消息中:Thread.stop()已弃用,Android不支持弃用的方法
也许您可以尝试在onCreate中使用Thread.sleep()来代替超时。答案在错误消息中:Thread.stop()已弃用,Android不支持弃用的方法
thread.stop() is deprecated method so you have to remove that line from your code.
也许您可以尝试在onCreate中使用Thread.sleep()来代替超时。Wow,真奇怪。弃用是删除的前奏。弃用并不意味着您不必实现该方法,它意味着您应该停止调用该方法,因为在未来的Java版本中,它将消失。我猜谷歌说的是实话:Android真的不是Java。没错,在Android设备上运行的JRE是Java的定制版本。它与从java.sun.com下载时得到的实现不同。同样的情况也适用于Google App Engine.IIRC,一些不推荐使用的线程方法甚至没有被Sun/Oracle JVM实现。我认为谷歌在这里所做的是正确的,它践踏了其他人。哇,太奇怪了。弃用是删除的前奏。弃用并不意味着您不必实现该方法,它意味着您应该停止调用该方法,因为在未来的Java版本中,它将消失。我猜谷歌说的是实话:Android真的不是Java。没错,在Android设备上运行的JRE是Java的定制版本。它与从java.sun.com下载时得到的实现不同。同样的情况也适用于Google App Engine.IIRC,一些不推荐使用的线程方法甚至没有被Sun/Oracle JVM实现。我认为谷歌在这方面的做法是正确的,他用
sleep()
来实现超时,而stop()
是在超时完成后使用的,完全没有必要。当run()
方法返回时,线程将自行停止?是的,只需删除stop()
。当run()
退出时,线程自然停止。我也遇到了同样的问题。我是根据自己认为合适的方式命名自己的函数的,我甚至没有考虑过线程
对象有一个不推荐的stop()
方法。。。为什么不这么说?谢谢。他正在使用sleep()
来实现超时,而stop()
是在超时完成后使用的,完全没有必要。当run()
方法返回时,线程将自行停止?是的,只需删除stop()
。当run()
退出时,线程自然停止。我也遇到了同样的问题。我是根据自己认为合适的方式命名自己的函数的,我甚至没有考虑过线程
对象有一个不推荐的stop()
方法。。。为什么不这么说?谢谢
thread.stop() is deprecated method so you have to remove that line from your code.