2013-03-14 65 views
0

我有一个变量,当我点击一个按钮,然后应该输入一个变量(设置为1),因为变量设置为1,但它没有。在logcat节拍器中单击消息被打印,但InWhile消息不会被打印。为什么?我应该怎么做才能进入?Android SDK虽然不想开始,但条件是真的

metronomepp.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (ms==0) {ms=1;} 
      Log.i("Metronome clicked", ""+ms); 
     } 
    }); 

    while (ms == 1) { 
     Log.i("Metronome", "InWhile"); 
     if (metronome.isPlaying()) {metronome.stop();} 
     metronome.seekTo(0); 
     metronome.setOnSeekCompleteListener(null); 
     metronome.start(); 
     metronome.setOnCompletionListener(null); 
     metronomepp.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       ms=0; 
      } 
     }); 
    } 

解决:移动而onClick!但现在应用程序崩溃。

按下按钮后

logcat的(声音只打了一次,然后应用程序崩溃):

03-14 19:10:30.584: I/Metronome clicked(25448): 1 
03-14 19:10:30.584: I/Metronome(25448): InWhile 
03-14 19:10:30.584: V/MediaPlayer(25448): isPlaying: 0 
03-14 19:10:30.584: V/MediaPlayer-JNI(25448): isPlaying: 0 
03-14 19:10:30.584: V/MediaPlayer-JNI(25448): seekTo: 0(msec) 
03-14 19:10:30.584: V/MediaPlayer(25448): seekTo 0 
03-14 19:10:30.584: V/MediaPlayer(25448): getDuration 
03-14 19:10:30.584: V/MediaPlayer(25448): message received msg=4, ext1=0, ext2=0 
03-14 19:10:30.589: V/MediaPlayer(25448): Received seek complete 
03-14 19:10:30.589: V/MediaPlayer(25448): All seeks complete - return to regularly scheduled program 
03-14 19:10:30.589: V/MediaPlayer(25448): callback application 
03-14 19:10:30.589: V/MediaPlayer(25448): back from callback 
03-14 19:10:30.589: V/MediaPlayer-JNI(25448): start 
03-14 19:10:30.589: V/MediaPlayer(25448): start 
03-14 19:10:30.619: D/AndroidRuntime(25448): Shutting down VM 
03-14 19:10:30.619: W/dalvikvm(25448): threadid=1: thread exiting with uncaught exception (group=0x40c581f8) 
03-14 19:10:30.624: E/AndroidRuntime(25448): FATAL EXCEPTION: main 
03-14 19:10:30.624: E/AndroidRuntime(25448): java.lang.IllegalMonitorStateException: object not locked by thread before wait() 
03-14 19:10:30.624: E/AndroidRuntime(25448): at java.lang.Object.wait(Native Method) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at java.lang.Object.wait(Object.java:401) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at com.example.guitartools.MetronomeActivity$3.onClick(MetronomeActivity.java:72) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at android.view.View.performClick(View.java:3627) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at android.view.View$PerformClick.run(View.java:14329) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at android.os.Handler.handleCallback(Handler.java:605) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at android.os.Looper.loop(Looper.java:137) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at android.app.ActivityThread.main(ActivityThread.java:4511) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at java.lang.reflect.Method.invokeNative(Native Method) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at java.lang.reflect.Method.invoke(Method.java:511) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
03-14 19:10:30.624: E/AndroidRuntime(25448): at dalvik.system.NativeStart.main(Native Method) 
03-14 19:10:30.969: V/MediaPlayer(25448): message received msg=2, ext1=0, ext2=0 
03-14 19:10:30.969: V/MediaPlayer(25448): playback complete 
03-14 19:10:30.969: V/MediaPlayer(25448): callback application 
03-14 19:10:30.969: V/MediaPlayer(25448): back from callback 

这里是同时使用线程后,代码:

metronomepp.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (ms==0) {ms=1;} 
      while (ms == 1) { 
       runThread(); 
      } 
     } 
    }); 

这里是外螺纹码onCreate:

private void runThread() { 
    new Thread() { 
     public void run() { 

       if (metronome.isPlaying()) {metronome.pause();} 
       metronome.seekTo(0); 
       metronome.setOnSeekCompleteListener(null); 
       metronome.start(); 
       metronome.setOnCompletionListener(null); 
       try { 
        Thread.sleep((long) timetw); 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
       metronomepp.setOnClickListener(new OnClickListener() { 
        public void onClick(View v) { 
         Log.i("Metronome", "InWhile1"); 
         ms=0; 
        } 
       }); 
     } 
    }.start(); 
} 

和tyCring输出后,tyring开始此活动:

03-14 19:56:46.214: D/AndroidRuntime(28668): Shutting down VM 
03-14 19:56:46.214: W/dalvikvm(28668): threadid=1: thread exiting with uncaught exception (group=0x40c581f8) 
03-14 19:56:46.219: E/AndroidRuntime(28668): FATAL EXCEPTION: main 
03-14 19:56:46.219: E/AndroidRuntime(28668): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.crnibero.guitartools/com.example.guitartools.MetronomeActivity}: java.lang.NullPointerException 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1891) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.app.ActivityThread.access$600(ActivityThread.java:127) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.os.Looper.loop(Looper.java:137) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.app.ActivityThread.main(ActivityThread.java:4511) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at java.lang.reflect.Method.invokeNative(Native Method) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at java.lang.reflect.Method.invoke(Method.java:511) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at dalvik.system.NativeStart.main(Native Method) 
03-14 19:56:46.219: E/AndroidRuntime(28668): Caused by: java.lang.NullPointerException 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.app.Activity.findViewById(Activity.java:1794) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at com.example.guitartools.MetronomeActivity.<init>(MetronomeActivity.java:29) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at java.lang.Class.newInstanceImpl(Native Method) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at java.lang.Class.newInstance(Class.java:1319) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.app.Instrumentation.newActivity(Instrumentation.java:1026) 
03-14 19:56:46.219: E/AndroidRuntime(28668): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1882) 
03-14 19:56:46.219: E/AndroidRuntime(28668): ... 11 more 
+3

当你点击按钮时,你必须移动'while(ms == 1){//你的代码...}'onClick on按钮 – 2013-03-14 17:49:09

+0

,这是显而易见的事情,只有代码驻留在它的块onClick(View v)方法将被执行。为了更好地说明,只有在执行while(){}的代码块时,才会执行while(){}。 – 2013-03-14 18:04:09

回答

4

您必须将您的While循环代码放入onClick。

+0

然后,当我点击按钮应用程序崩溃。为什么? – 2013-03-14 18:04:28

+0

@ user1974007:如果应用程序在移动后崩溃while循环代码在onClick然后plz添加您的logcat结果的问题 – 2013-03-14 18:07:35

+0

添加到问题 – 2013-03-14 18:12:43