Android 由于错误,nullpointerexception主线程正在退出

Android 由于错误,nullpointerexception主线程正在退出,android,eclipse,nullpointerexception,Android,Eclipse,Nullpointerexception,错误是: W/dalvikvm(320): threadid=3: thread exiting with uncaught exception (group=0x4001b188) E/AndroidRuntime(320): Uncaught handler: thread main exiting due to uncaught exception E/AndroidRuntime(320): java.lang.NullPointerException E/AndroidRunt

错误是:

 W/dalvikvm(320): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
 E/AndroidRuntime(320): Uncaught handler: thread main exiting due to uncaught exception
 E/AndroidRuntime(320): java.lang.NullPointerException
 E/AndroidRuntime(320):     at com.android.vosori.Amp$1.onCheckedChanged(Amp.java:58)
 E/AndroidRuntime(320):     at android.widget.CompoundButton.setChecked(CompoundButton.java:122)
E/AndroidRuntime(320):  at android.widget.ToggleButton.setChecked(ToggleButton.java:66)
 E/AndroidRuntime(320):     at android.widget.CompoundButton.toggle(CompoundButton.java:85)
 E/AndroidRuntime(320):     at android.widget.CompoundButton.performClick(CompoundButton.java:97)
 E/AndroidRuntime(320):     at android.view.View.onTouchEvent(View.java:4179)
 E/AndroidRuntime(320):     at android.widget.TextView.onTouchEvent(TextView.java:6541)
 E/AndroidRuntime(320):     at android.view.View.dispatchTouchEvent(View.java:3709)      E/AndroidRuntime(320):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
 E/AndroidRuntime(320):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
 E/AndroidRuntime(320):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
 E/AndroidRuntime(320):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
E/AndroidRuntime(320):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
E/AndroidRuntime(320):  at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
 E/AndroidRuntime(320):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
 E/AndroidRuntime(320):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
 E/AndroidRuntime(320):     at android.os.Handler.dispatchMessage(Handler.java:99)
 E/AndroidRuntime(320):     at android.os.Looper.loop(Looper.java:123)
 E/AndroidRuntime(320):     at android.app.ActivityThread.main(ActivityThread.java:4363)
 E/AndroidRuntime(320):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(320):  at java.lang.reflect.Method.invoke(Method.java:521)
 E/AndroidRuntime(320):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
 E/AndroidRuntime(320):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
 E/AndroidRuntime(320):     at dalvik.system.NativeStart.main(Native Method)
和。。资料来源是:

public class Amp extends Activity implements OnSeekBarChangeListener {

    WakeLock wL;
    public boolean tb;
    SeekBar volume;
    AudioManager am;
    MediaPlayer mp;
    AudioRecord arec;
    AudioTrack atrack;
    ToggleButton tbs;
    static final int buffersize = 200000;
    final short[] buffer = new short[buffersize];
    short[] readBuffer = new short[buffersize];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        // wake-lock
        PowerManager pM = (PowerManager) getSystemService(Context.POWER_SERVICE);
        WakeLock wL = pM.newWakeLock(PowerManager.FULL_WAKE_LOCK, "whatever");

        super.onCreate(savedInstanceState);
        wL.acquire();
        // fullscreen
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
            android.os.Process
                    .setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
            int bufferSize = AudioRecord.getMinBufferSize(8000,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    AudioFormat.ENCODING_PCM_16BIT);

            arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    AudioFormat.ENCODING_PCM_16BIT, bufferSize);
            atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000,
                    AudioFormat.CHANNEL_CONFIGURATION_MONO,
                    AudioFormat.ENCODING_PCM_16BIT, bufferSize,
                    AudioTrack.MODE_STREAM);
            atrack.setPlaybackRate(8000);
            byte[] buffer = new byte[bufferSize];


            while (tb) {
                arec.read(buffer, 0, bufferSize);
                atrack.write(readBuffer, 0, buffer.length);
            }

        tbs = (ToggleButton) findViewById(R.id.tbS);
        tbs.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                // TODO Auto-generated method stub
                if (isChecked) {
                    arec.startRecording();
                    atrack.play();
                } else {
                    arec.stop();
                    atrack.stop();

                }

            }
        });

        volume = (SeekBar) findViewById(R.id.sb1);
        am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        int maxV = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        int curV = am.getStreamVolume(AudioManager.STREAM_MUSIC);
        volume.setMax(maxV);
        volume.setProgress(curV);
        volume.setOnSeekBarChangeListener(this);
    }

    public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) {
        // TODO Auto-generated method stub
        am.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
        am.setSpeakerphoneOn(true);

    }

    public void onStartTrackingTouch(SeekBar arg0) {
        // TODO Auto-generated method stub

    }

    public void onStopTrackingTouch(SeekBar arg0) {
        // TODO Auto-generated method stub

    }


}
你能帮帮我吗?这几天我一直在忙,找不到办法解决这个问题

更新 编辑:对不起D:我不太擅长这个D:我可能也有一个错误
还尝试将这些内容移到oncheckedchanged方法中,但没有成功:S

在调用方法“run”之前,您不会初始化arec和atrack变量。 我看不到您的代码中有任何地方调用了run()方法,因此这些变量永远不会被初始化


将初始化这些变量移动到onCreate中,问题应该会消失

参见Amp.java中的第58行?第58行是atrack.play();但我真的不知道是什么错??你的意思是我必须将方法运行中的所有内容移动到onCreate中?删除了run方法并复制了oncreate中的所有内容,但它仍然存在相同的问题:S您能解释得更详细一些吗?您能用新代码更新您的问题吗?我能看到它有什么问题吗?更新:S可能我做错了对不起,我不擅长这个D:也许您想说我只能放arec.startrecording()和atrack.play()来创建方法?或者你能告诉我调用run方法需要做什么吗?为了使用一个对象,你必须首先初始化它。您没有初始化对象,因此它们为空/空(导致空指针异常)。更新的代码应该正确初始化对象。你确定它还是因为同样的原因崩溃吗?