有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

模拟器上出现java运行时错误,但手机上未出现nullpointer异常

我的代码在一个try-catch循环中。它在我的手机(三星Galaxy S3)上运行良好,但在Eclipse模拟器中出现运行时错误

这个错误是在我给这个方法添加了一个颜色设置,并使用了GradientDrawable作为我按钮的背景后出现的(尽管在其他位置这似乎可以正常工作)

我在这里完全迷路了。。。请看一看,谢谢

生成错误的代码 注意:我在“return super.onContextItemSelected(item);”上放置了一个断点,在return语句上/之后生成运行时错误

@SuppressLint("NewApi") @SuppressWarnings("deprecation")
@Override
public boolean onContextItemSelected(MenuItem item) {   
    int timerLocation = findTimer(item.getGroupId());
    if (timerLocation > -1)
    {
        final MyCountDownTimer selectedFrag = this.myTimersList.get(timerLocation).fragmentRef;
        switch (item.getItemId()) {
            case R.id.timer_settings:
                // Open timer specific options menu:
                defaultSettingsMenu(selectedFrag);
                return true;

            default:
                return super.onContextItemSelected(item);
        }
    }
    else timerClickScreen.setText("ERROR: timer not found: " + String.valueOf(item.getGroupId()) + ", "+ String.valueOf(timerLocation));

    return super.onContextItemSelected(item); 
}

主要方法:

private void defaultSettingsMenu(MyCountDownTimer selectedFragIN)
{
    try
    {
        final MyCountDownTimer selectedFrag = selectedFragIN;

        final Dialog dialog_settings = new Dialog(this);
        dialog_settings.setContentView(R.layout.timer_set_options);

        if (selectedFrag == null) dialog_settings.setTitle(R.string.default_settings_for_timer);
        else dialog_settings.setTitle(R.string.timer_settings);

        if (selectedFrag == null)
        {
            // Set title color:
            dialog_settings.getWindow().setTitleColor(getDefaultColor());
            // Set divider color:
            int dividerTop = dialog_settings.getContext().getResources().getIdentifier("安卓:id/titleDivider", null, null);
            View divider1 = dialog_settings.findViewById(dividerTop);
            divider1.setBackgroundColor(getDefaultColor());
        }
        else
        {
            // Set title color:
            dialog_settings.getWindow().setTitleColor(selectedFrag.getTimerColor());
            // Set divider color:
            int dividerTop = dialog_settings.getContext().getResources().getIdentifier("安卓:id/titleDivider", null, null);
            View divider1 = dialog_settings.findViewById(dividerTop);
            divider1.setBackgroundColor(selectedFrag.getTimerColor());
        }

        final TextView[] settingsItems = new TextView[8];
        settingsItems[0]= (TextView) dialog_settings.findViewById(R.id.timerSettings_item1);
        settingsItems[1]= (TextView) dialog_settings.findViewById(R.id.timerSettings_item2);
        ...

        final Spinner[] settingsSetting = new Spinner[7];
        settingsSetting[0]= (Spinner) dialog_settings.findViewById(R.id.timerSettings_setting1);
        settingsSetting[1]= (Spinner) dialog_settings.findViewById(R.id.timerSettings_setting2);
        ...

        settingsItems[0].setText(R.string.settings_title1);
        settingsItems[1].setText(R.string.settings_title2);


        // Give some padding on left side:
        for (int i = 0; i<8; i++) settingsItems[i].setPadding(10, 0, 0, 0);

        // Create menu items:
        final String[] items1 = new String[]{getString(R.string.settings_menu1_item1), getString(R.string.settings_menu1_item2), getString(R.string.settings_menu1_item3), getString(R.string.settings_menu1_item4)};
        ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, 安卓.R.layout.simple_spinner_item, items1);
        settingsSetting[0].setAdapter(adapter1);

        if (selectedFrag == null) settingsSetting[0].setSelection(defaultTimerSettings.OnTapResponseValue.ordinal());
        else settingsSetting[0].setSelection(selectedFrag.getTapBehavior().ordinal());

        <... MORE SAME CODE HERE ...>

        SpinnerColorSelector mySpinnerColorSelector = new SpinnerColorSelector(this);
        settingsSetting[6].setAdapter(mySpinnerColorSelector);
        if (selectedFrag == null) settingsSetting[6].setSelection(findIntArraylist(mySpinnerColorSelector.colors, defaultTimerSettings.colorTimer));
        else settingsSetting[6].setSelection(findIntArraylist(mySpinnerColorSelector.colors,selectedFrag.getTimerColor()));

        dialog_settings.show();

        Button cancelButtonOptions = (Button) dialog_settings.findViewById(R.id.buttonTimerCancelOptions);

        int[] gradientColors = new int[3];
        if (selectedFrag == null) gradientColors = generateGradientColors(getDefaultColor());
        else gradientColors = generateGradientColors(selectedFrag.getTimerColor());
        if (安卓.os.Build.VERSION.SDK_INT >= 16) {
            GradientDrawable gdDefault = new GradientDrawable();
            gdDefault.setColors(gradientColors);
            gdDefault.setCornerRadius(10);
            gdDefault.setStroke(1, Color.GRAY);
            cancelButtonOptions.setBackground(gdDefault);
        } else {
            // Fallback for APIs under 16.
            GradientDrawable newGdDefault = new GradientDrawable(Orientation.BOTTOM_TOP, gradientColors);
            newGdDefault.setCornerRadius(10);
            newGdDefault.setStroke(1, Color.GRAY);
            cancelButtonOptions.setBackgroundDrawable(newGdDefault);
        }
        // if decline button is clicked, close the custom dialog
        cancelButtonOptions.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // Close dialog
                dialog_settings.dismiss();
            }
        });

      <...REMOVED TESTED CODE...>

                }
                // Close dialog
                dialog_settings.dismiss();
                //selectedFrag.setTimerValue(hour*60*60*1000+minutes*60*1000+seconds*1000); 
            }
        });
    }
    catch (Exception e)
    {
        Log.e("MainActivityError: defaultSettingsMenu function: Error in dialog function.",Log.getStackTraceString(e)); 
    }
}

mySpinnerColor选择器类:

public class SpinnerColorSelector extends BaseAdapter {
    ArrayList<Integer> colors;
    Context context;

    public SpinnerColorSelector(Context context) 
    {
        this.context=context;
        colors = new ArrayList<Integer>();
        colors.add(Color.parseColor("#57b947")); // Time Boss green
        colors.add(Color.parseColor("#33B5E5")); // Android blue
        colors.add(Color.parseColor("#0099CC")); // blue
        colors.add(Color.parseColor("#AA66CC")); // purple light
        colors.add(Color.parseColor("#9933CC")); // purple
        colors.add(Color.parseColor("#FFBB33")); // orange light
        colors.add(Color.parseColor("#FF8800")); // orange
        colors.add(Color.parseColor("#FF4444")); // red light
        colors.add(Color.parseColor("#CC0000")); // red
    }
    @Override
    public int getCount() 
    {
        return colors.size();
    }
    @Override
    public Object getItem(int arg0) 
    {
            return colors.get(arg0);
    }
    @Override
    public long getItemId(int arg0) 
    {
        return arg0;
    }
    @SuppressLint({ "ViewHolder", "InflateParams" }) @Override
    public View getView(int pos, View view, ViewGroup parent) 
    {
        LayoutInflater inflater=LayoutInflater.from(context);
        view=inflater.inflate(安卓.R.layout.simple_spinner_dropdown_item, null);
        TextView txv=(TextView)view.findViewById(安卓.R.id.text1);
        txv.setBackgroundColor(colors.get(pos));
        txv.setTextSize(20f);
        txv.setTextColor(colors.get(pos));
        txv.setText(colors.get(pos).toString());
        return view;
    }

}

LOGCAT输出:

09-24 15:14:24.631: E/AndroidRuntime(1698): FATAL EXCEPTION: main
09-24 15:14:24.631: E/AndroidRuntime(1698): Process: com.xpresspe.stopwatch, PID: 1698
09-24 15:14:24.631: E/AndroidRuntime(1698): java.lang.NullPointerException
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.TextView.makeNewLayout(TextView.java:6113)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.TextView.onMeasure(TextView.java:6408)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.View.measure(View.java:16648)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.Spinner.setUpChild(Spinner.java:632)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.Spinner.makeView(Spinner.java:585)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.Spinner.getBaseline(Spinner.java:431)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.LinearLayout.measureHorizontal(LinearLayout.java:1089)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:590)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.View.measure(View.java:16648)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.LinearLayout.forceUniformWidth(LinearLayout.java:940)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:920)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:588)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.View.measure(View.java:16648)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.ScrollView.measureChildWithMargins(ScrollView.java:1226)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:310)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.ScrollView.onMeasure(ScrollView.java:326)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.View.measure(View.java:16648)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:310)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.View.measure(View.java:16648)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:310)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.View.measure(View.java:16648)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.LinearLayout.measureVertical(LinearLayout.java:695)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.LinearLayout.onMeasure(LinearLayout.java:588)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.View.measure(View.java:16648)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.widget.FrameLayout.onMeasure(FrameLayout.java:310)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at com.安卓.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2321)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.View.measure(View.java:16648)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1959)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1145)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1340)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1032)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5657)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.Choreographer.doCallbacks(Choreographer.java:574)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.Choreographer.doFrame(Choreographer.java:544)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.os.Handler.handleCallback(Handler.java:733)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.os.Handler.dispatchMessage(Handler.java:95)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.os.Looper.loop(Looper.java:136)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at 安卓.app.ActivityThread.main(ActivityThread.java:5026)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at java.lang.reflect.Method.invokeNative(Native Method)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at java.lang.reflect.Method.invoke(Method.java:515)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:602)
09-24 15:14:24.631: E/AndroidRuntime(1698):     at dalvik.system.NativeStart.main(Native Method)

请帮帮我


共 (1) 个答案

  1. # 1 楼答案

    在SpinnerColorSelector类中,我改变了:

    view=inflater.inflate(android.R.layout.simple_spinner_dropdown_item, null);
    

    致:

    view=inflater.inflate(android.R.layout.simple_spinner_dropdown_item, parent, false);
    

    运行时错误消失了!现在它在模拟器上运行没有问题。。。仍然奇怪的是,try-catch没有捕捉到这一条(可能是因为该对话框是在以后的某个时候在引擎盖下创建的)。不管怎样,回到快乐的小狗

    这也消除了@SuppressLint({“InflateParams”})