Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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错误异常:E/AndroidRuntime(15779):Android.view.ViewRootImpl$CalledFromErrorThreadException:_Java_Android_Multithreading - Fatal编程技术网

Java Android错误异常:E/AndroidRuntime(15779):Android.view.ViewRootImpl$CalledFromErrorThreadException:

Java Android错误异常:E/AndroidRuntime(15779):Android.view.ViewRootImpl$CalledFromErrorThreadException:,java,android,multithreading,Java,Android,Multithreading,我在运行游戏时不断收到此错误消息: 01-21 16:14:00.911: E/AndroidRuntime(15779): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 01-21 16:14:00.911: E/AndroidRuntime(15779): at an

我在运行游戏时不断收到此错误消息:

01-21 16:14:00.911: E/AndroidRuntime(15779): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6373)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:878)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.view.View.requestLayout(View.java:17566)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.view.View.requestLayout(View.java:17566)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.view.View.requestLayout(View.java:17566)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.view.View.requestLayout(View.java:17566)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:361)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.view.View.requestLayout(View.java:17566)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.widget.ScrollView.requestLayout(ScrollView.java:1483)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.view.View.requestLayout(View.java:17566)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:361)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.view.View.requestLayout(View.java:17566)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.widget.TextView.checkForRelayout(TextView.java:6914)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.widget.TextView.setText(TextView.java:4096)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.widget.TextView.setText(TextView.java:3954)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at android.widget.TextView.setText(TextView.java:3929)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at com.gamerscave.corpboss.Game.Overview_Viewupdate(Game.java:305)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at com.gamerscave.corpboss.Game.tick(Game.java:174)
01-21 16:14:00.911: E/AndroidRuntime(15779):    at com.gamerscave.corpboss.game.GameThread.run(GameThread.java:27)
此错误代码是由以下原因引起的:

    public void Overview_Viewupdate(){
    tv1.setText("Balance: " + Maths.coustomFormat(DEFAULT_BIG_NUMBER_PATTERN, bal));
    tv2.setText("Income: " + Maths.coustomFormat(DEFAULT_BIG_NUMBER_PATTERN, inc));
    tv3.setText("Nett worth: " + Maths.coustomFormat(DEFAULT_BIG_NUMBER_PATTERN, NettWorth));
    tv4.setText("Shares: " + sharePercent + "%");
    tv5.setText("Share value: " + ShareVal);
    tv6.setText("Date: " + Date);
}
它被称为:

    public void tick(){
    player.tick();

    long elapsed = (System.nanoTime()-startTime)/1000000;

    if(elapsed>1000)
    {
        nextDay(day, year, month);
        System.out.println("New day: " + day);
        startTime = System.nanoTime();
    }

    if(view1){
        Overview_Viewupdate();
    }

}

由于某种原因,它在发射时没有被触发。在init方法中调用启动更改。init方法是从GameThread类的run方法调用的。那么,我如何避免这个错误,并且仍然有一个可用的游戏线程呢?

您的问题是,您正在非UI线程上更新UI元素。有两种方法可以解决这个问题。在您的情况下,我认为最好的方法是使用声明,如下所示(注意,这必须在活动中进行):

RuOnUiThread(新的可运行(){ 无效运行(){ 概述_Viewupdate(); } }); 您的问题是您正在非UI线程上更新UI元素。有两种方法可以解决这个问题。在您的情况下,我认为最好的方法是使用声明,如下所示(注意,这必须在活动中进行):

此代码将替换您当前调用的
概述\u ViewUpdate
。或者,您可以考虑一个,其中OnPracess执行运行<代码> OutVIEWIVIEWUPDATE(),并且您的代码> DONBACKEATE() >在后台运行必须运行的操作。


另外,确保您的UI元素是在UI线程上创建的。这通常在
OnCreate
OnStart
中完成
AddContentView(…)
SetContentView(…)
也算在内。

上述错误的发生是因为Android不希望其他线程(如计时器)干扰其GUI。所以,你需要做的是礼貌地让Android为你进行更新

public void tick(){
  player.tick();

  long elapsed = (System.nanoTime()-startTime)/1000000;

  if(elapsed>1000)
  {
    nextDay(day, year, month);
    System.out.println("New day: " + day);
    startTime = System.nanoTime();
  }

  if(view1){
      runOnUiThread(new Runnable() {
        public void run(){  
           Overview_Viewupdate(); 
      }   
  });
 }

}
public void tick(){
  player.tick();

  long elapsed = (System.nanoTime()-startTime)/1000000;

  if(elapsed>1000)
  {
    nextDay(day, year, month);
    System.out.println("New day: " + day);
    startTime = System.nanoTime();
  }

  if(view1){
      runOnUiThread(new Runnable() {
        public void run(){  
           Overview_Viewupdate(); 
      }   
  });
 }

}