2017-07-28 84 views
-2

這個功能崩潰我的應用程序,我不知道爲什麼。功能改變背景顏色崩潰的應用程序

public void whileLoopForChange(){ 
    while (gameRunning = true){ 
     View someView = findViewById(R.id.screen); 
     final View root = someView.getRootView(); 
     Random rand = new Random(); 
     final int value = rand.nextInt(15); 
     if(lvl<10){ 
      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
        if(value == 1){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red)); 
         currentColor = "red"; 
        }else if(value == 2){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink)); 
         currentColor = "pink"; 
        }else if(value == 3){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange)); 
         currentColor = "orange"; 
        }else if(value == 4){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue)); 
         currentColor = "blue"; 
        }else if(value == 5){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green)); 
         currentColor = "green"; 
        }else if(value == 6){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White)); 
         currentColor = "white"; 
        }else if(value == 7){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black)); 
         currentColor = "black"; 
        }else if(value == 8){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon)); 
         currentColor = "salmon"; 
        }else if(value == 9){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet)); 
         currentColor = "violet"; 
        }else if(value == 10){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan)); 
         currentColor = "cyan"; 
        }else if(value == 11){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray)); 
         currentColor = "darkgray"; 
        }else if(value == 12){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray)); 
         currentColor = "gray"; 
        }else if(value == 13){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate)); 
         currentColor = "chocolate"; 
        }else if(value == 14){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver)); 
         currentColor = "silver"; 
        } 
       } 
      }, 1000); 
     }else if(lvl<15 && lvl>9) { 
      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
        if(value == 1){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red)); 
         currentColor = "red"; 
        }else if(value == 2){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink)); 
         currentColor = "pink"; 
        }else if(value == 3){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange)); 
         currentColor = "orange"; 
        }else if(value == 4){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue)); 
         currentColor = "blue"; 
        }else if(value == 5){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green)); 
         currentColor = "green"; 
        }else if(value == 6){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White)); 
         currentColor = "white"; 
        }else if(value == 7){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black)); 
         currentColor = "black"; 
        }else if(value == 8){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon)); 
         currentColor = "salmon"; 
        }else if(value == 9){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet)); 
         currentColor = "violet"; 
        }else if(value == 10){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan)); 
         currentColor = "cyan"; 
        }else if(value == 11){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray)); 
         currentColor = "darkgray"; 
        }else if(value == 12){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray)); 
         currentColor = "gray"; 
        }else if(value == 13){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate)); 
         currentColor = "chocolate"; 
        }else if(value == 14){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver)); 
         currentColor = "silver"; 
        } 
       } 
      }, 750); 
     }else if(lvl<20 && lvl>14){ 
      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
        if(value == 1){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red)); 
         currentColor = "red"; 
        }else if(value == 2){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink)); 
         currentColor = "pink"; 
        }else if(value == 3){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange)); 
         currentColor = "orange"; 
        }else if(value == 4){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue)); 
         currentColor = "blue"; 
        }else if(value == 5){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green)); 
         currentColor = "green"; 
        }else if(value == 6){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White)); 
         currentColor = "white"; 
        }else if(value == 7){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black)); 
         currentColor = "black"; 
        }else if(value == 8){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon)); 
         currentColor = "salmon"; 
        }else if(value == 9){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet)); 
         currentColor = "violet"; 
        }else if(value == 10){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan)); 
         currentColor = "cyan"; 
        }else if(value == 11){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray)); 
         currentColor = "darkgray"; 
        }else if(value == 12){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray)); 
         currentColor = "gray"; 
        }else if(value == 13){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate)); 
         currentColor = "chocolate"; 
        }else if(value == 14){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver)); 
         currentColor = "silver"; 
        } 
       } 
      }, 600); 
     }else if(lvl<30 && lvl>19){ 
      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
        if(value == 1){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red)); 
         currentColor = "red"; 
        }else if(value == 2){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink)); 
         currentColor = "pink"; 
        }else if(value == 3){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange)); 
         currentColor = "orange"; 
        }else if(value == 4){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue)); 
         currentColor = "blue"; 
        }else if(value == 5){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green)); 
         currentColor = "green"; 
        }else if(value == 6){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White)); 
         currentColor = "white"; 
        }else if(value == 7){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black)); 
         currentColor = "black"; 
        }else if(value == 8){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon)); 
         currentColor = "salmon"; 
        }else if(value == 9){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet)); 
         currentColor = "violet"; 
        }else if(value == 10){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan)); 
         currentColor = "cyan"; 
        }else if(value == 11){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray)); 
         currentColor = "darkgray"; 
        }else if(value == 12){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray)); 
         currentColor = "gray"; 
        }else if(value == 13){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate)); 
         currentColor = "chocolate"; 
        }else if(value == 14){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver)); 
         currentColor = "silver"; 
        } 
       } 
      }, 550); 
     }else if(lvl<50 && lvl>29){ 
      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
        if(value == 1){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red)); 
         currentColor = "red"; 
        }else if(value == 2){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink)); 
         currentColor = "pink"; 
        }else if(value == 3){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange)); 
         currentColor = "orange"; 
        }else if(value == 4){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue)); 
         currentColor = "blue"; 
        }else if(value == 5){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green)); 
         currentColor = "green"; 
        }else if(value == 6){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White)); 
         currentColor = "white"; 
        }else if(value == 7){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black)); 
         currentColor = "black"; 
        }else if(value == 8){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon)); 
         currentColor = "salmon"; 
        }else if(value == 9){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet)); 
         currentColor = "violet"; 
        }else if(value == 10){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan)); 
         currentColor = "cyan"; 
        }else if(value == 11){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray)); 
         currentColor = "darkgray"; 
        }else if(value == 12){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray)); 
         currentColor = "gray"; 
        }else if(value == 13){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate)); 
         currentColor = "chocolate"; 
        }else if(value == 14){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver)); 
         currentColor = "silver"; 
        } 
       } 
      }, 500); 
     }else if(lvl<49){ 
      new Timer().schedule(new TimerTask() { 
       @Override 
       public void run() { 
        if(value == 1){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Red)); 
         currentColor = "red"; 
        }else if(value == 2){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Pink)); 
         currentColor = "pink"; 
        }else if(value == 3){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Orange)); 
         currentColor = "orange"; 
        }else if(value == 4){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Blue)); 
         currentColor = "blue"; 
        }else if(value == 5){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Green)); 
         currentColor = "green"; 
        }else if(value == 6){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.White)); 
         currentColor = "white"; 
        }else if(value == 7){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Black)); 
         currentColor = "black"; 
        }else if(value == 8){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Salmon)); 
         currentColor = "salmon"; 
        }else if(value == 9){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Violet)); 
         currentColor = "violet"; 
        }else if(value == 10){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Cyan)); 
         currentColor = "cyan"; 
        }else if(value == 11){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.DarkGray)); 
         currentColor = "darkgray"; 
        }else if(value == 12){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Gray)); 
         currentColor = "gray"; 
        }else if(value == 13){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Chocolate)); 
         currentColor = "chocolate"; 
        }else if(value == 14){ 
         root.setBackgroundColor(ContextCompat.getColor(MainActivity.this, R.color.Silver)); 
         currentColor = "silver"; 
        } 
       } 
      }, 350); 
     } 
    } 

當我刪除函數及其調用時,該應用程序運行良好。 我很新的android,但有java體驗。 對於這個函數的調用是在onCreate方法中,默認情況下出現在那個方法中。 我沒有把任何東西放在佈局XML文件,我沒有其他功能,但onCreate在我的主要活動。

編輯1:刪除計時器使應用程序不會崩潰。我會如何替換定時器函數,讓代碼在一秒之後運行?

編輯2: Logcat:---------開始崩潰 07-28 15:15:37.259 32203-32203 /? E/AndroidRuntime:致命例外:main 進程:io.eliot.colorstop,PID:32203 java.lang.RuntimeException:無法啓動活動ComponentInfo {io.eliot.colorstop/io.eliot.colorstop.MainActivity}:java。 lang.NullPointerException:試圖在android上的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984) 上的空對象引用 上調用虛擬方法'android.view.View android.view.View.getRootView()'。在android.app.ActivityThread上的app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1642) at android.os .Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) at java.lang.reflect.Method.invoke(Native Method) at com .android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1520) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 引起:java.lang.NullPointerException:嘗試在io.eliot.colorstop.MainActivity.whileLoopF​​orChange(MainActivity.java:34) 處的空對象引用 上調用虛擬方法'android.view.View android.view.View.getRootView()' .MainActivity.onCreate(MainActivity.java:29) 在android.app.Activity.performCreate(Activity.java:6955) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927) 在機器人.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) at android.app.ActivityThread.-wrap14(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1642) at android。 os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6776) 在java.lang.reflect.Method.invoke(本機方法) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1520) 在com.android.internal.os.ZygoteInit.main( ZygoteInit.java:1410)

看完logcat後,似乎它得到了崩潰它的根視圖。

+1

什麼是logcat?放在這裏更好地幫助 –

+0

你能告訴我們錯誤嗎? – Lino

+0

'while(gameRunning = true){'將其設置爲true,不會比較 – inarilo

回答

1

定時器在新線程中運行代碼。使用runOnUiThread函數

runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         //Your code here. 
        } 
       }); 
+0

但是,我怎麼會讓它每秒運行?了Thread.sleep(1000);心不是工作 –

+0

嘗試使用處理程序 [樣品1](https://stackoverflow.com/questions/29654421/java-runonuithread-and-thread-sleep) [樣品2](HTTPS://計算器。 COM /問題/ 11140285 /如何使用的,runonuithread) –