在查看this之后,我试图阻止一个帖子,这就是我所拥有的
Thread restartLocation = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread mThis = Thread.currentThread();
while(restartLocation == mThis) {
for(int i = 0; i < 10; i++) {
Log.d("Delay", i+" seconds");
Thread.sleep(1000);
}
runOnUiThread(new Runnable() {
@Override
public void run() {
map.setMyLocationEnabled(true);
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
//When the map is drag stop it update with the users location
//If the user drags the map to look around they dont want it moving back
mf.setOnDragListener(new TouchableWrapper.OnDragListener() {
@Override
public void onDrag(MotionEvent motionEvent) {
map.setMyLocationEnabled(false);
Log.d("Map", "Stopped location and remove drag listener");
if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP) {
//Stop restartLocation if it's running
restartLocation.start();
}
}
});
但是,我在此行while(restartLocation == mThis) {
变量上收到错误。可能尚未初始化restartLocation。我该如何解决这个错误?或者,有没有更好的方法可以阻止这个线程?
答案 0 :(得分:0)
您正尝试在其初始化本身中使用restartLocation
引用。它尚未初始化。在初始化之前,您无法使用它。这就是错误的原因!
答案 1 :(得分:0)
使restartLocation
成为一个成员变量。由于成员使用默认值进行初始化(在这种情况下为null),因此错误应该消失。
当然这只是一个建议,因为您没有提供有关您的代码运行环境的任何信息。
但是,您的代码包含另一个错误:
必须将匿名类范围之外的变量声明为final
才能从匿名类中访问。在您的代码中,您将无法阅读restartLocation
,因为它未被声明为final
。