【问题标题】:Crash when calling a function from a second Java file从第二个 Java 文件调用函数时崩溃
【发布时间】:2012-02-18 02:09:37
【问题描述】:

我对 android 游戏比较陌生,每当我从第二个 java 类调用函数时,我的应用程序就会崩溃。

这是我的主要 JAVA 文件:

    package mashuda.tools.calculator;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Gravity;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class CalculatorActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        Drawinterface layout = new Drawinterface();


        setContentView(layout.drawit());


    }

}

它正在调用此代码:

 package mashuda.tools.calculator;

import android.app.Activity;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Gravity;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class Drawinterface extends Activity { 
    /** Called when the activity is first created. 
     * @return */


        TableLayout drawit(){

            TableLayout maintable = new TableLayout(this);

            maintable.setStretchAllColumns(true);
            maintable.setShrinkAllColumns(true);

            TableRow banner = new TableRow(this);
            banner.setGravity(Gravity.CENTER_HORIZONTAL);

            TableRow rowOutput = new TableRow(this);
            TableRow rowSeven = new TableRow(this);
            TableRow rowFour = new TableRow(this);
            TableRow rowOne = new TableRow(this);
            TableRow rowZero = new TableRow(this);


            //answer box
            TextView answer = new TextView(this);
            answer.setText("ANSWER");

            answer.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);

            answer.setBackgroundColor(-1);

            answer.setGravity(Gravity.RIGHT);
            answer.setTypeface(Typeface.SERIF);

            TableRow.LayoutParams params = new TableRow.LayoutParams();
            params.span = 5;

            //loads answer bar
            rowOutput.addView(answer, params);
            //first column
            //creates 7 key
            Button sevenkey = new Button(this);
            sevenkey.setText("7");
            sevenkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 8 key
            Button eightkey = new Button(this);
            eightkey.setText("8");
            eightkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 9 key
            Button ninekey = new Button(this);
            ninekey.setText("9");
            ninekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates division key
            Button dividekey = new Button(this);
            dividekey.setText("/");
            dividekey.setTypeface(Typeface.DEFAULT_BOLD);

            // loads top row
            rowSeven.addView(sevenkey);
            rowSeven.addView(eightkey);
            rowSeven.addView(ninekey);
            rowSeven.addView(dividekey);

            //creates 4 key
            Button fourkey = new Button(this);
            fourkey.setText("4");
            fourkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 5 key
            Button fivekey = new Button(this);
            fivekey.setText("5");
            fivekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 6 key
            Button sixkey = new Button(this);
            sixkey.setText("6");
            sixkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates multiplication key
            Button multiplykey = new Button(this);
            multiplykey.setText("X");
            multiplykey.setTypeface(Typeface.DEFAULT_BOLD);

            // loads keys into second row
            rowFour.addView(fourkey);
            rowFour.addView(fivekey);
            rowFour.addView(sixkey);
            rowFour.addView(multiplykey);


            //creates 1 key
            Button onekey = new Button(this);
            onekey.setText("1");
            onekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 2 key
            Button twokey = new Button(this);
            twokey.setText("2");
            twokey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates 3 key
            Button threekey = new Button(this);
            threekey.setText("3");
            threekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates add key
            Button addkey = new Button(this);
            addkey.setText("+");
            addkey.setTypeface(Typeface.DEFAULT_BOLD);

            // loads keys into third row
            rowOne.addView(onekey);
            rowOne.addView(twokey);
            rowOne.addView(threekey);
            rowOne.addView(addkey);

            //creates 0 key
            Button zerokey = new Button(this);
            zerokey.setText("0");
            zerokey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates . key
            Button decimalkey = new Button(this);
            decimalkey.setText(".");
            decimalkey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates - key
            Button negativekey = new Button(this);
            negativekey.setText("+/-");
            negativekey.setTypeface(Typeface.DEFAULT_BOLD);

            // creates equals key
            Button equalskey = new Button(this);
            equalskey.setText("=");
            equalskey.setTypeface(Typeface.DEFAULT_BOLD);

            // loads keys into fourth row
            rowZero.addView(zerokey);
            rowZero.addView(decimalkey);
            rowZero.addView(negativekey);
            rowZero.addView(equalskey);

            // loads rows into table
            maintable.addView(rowOutput); 
            maintable.addView(rowSeven); 
            maintable.addView(rowFour);
            maintable.addView(rowOne);
            maintable.addView(rowZero); 

            //sets view as maintable
            return (maintable);

}
}

我确实将第二个文件添加到了 android 清单中。 我的编译器(eclipse)没有检测到任何错误。 任何帮助将不胜感激

【问题讨论】:

  • 是的:它抛出运行时异常并且主要活动无法启动
  • 能否包含崩溃输出?
  • 02-17 21:13:59.791: E/AndroidRuntime(413): java.lang.RuntimeException: 无法启动活动 ComponentInfo{mashuda.tools.calculator/mashuda.tools.calculator.CalculatorActivity} : java.lang.NullPointerException
  • 它指的是行号吗?如果有,是哪一行代码?
  • 它没有给出行号。程序编译得很好,但是当它运行时,它崩溃了,我的调试器无法告诉我行号

标签: java android crash


【解决方案1】:

不要以编程方式创建 TableLayout,而是使用 xml 资源文件。

这里有一个教程:http://huuah.com/using-tablelayout-on-android/

【讨论】:

    【解决方案2】:

    我复制了你的代码,这是我得到的错误,还没有答案,但这可能对其他人有帮助

    02-17 20:00:27.020: DEBUG/dalvikvm(1176): GC freed 30619 objects / 777176 bytes in 06ms
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222): Caused by: java.lang.NullPointerException
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.content.ContextWrapper.getResources(ContextWrapper.java:80)
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.view.View.<init>(View.java:1777)
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.view.ViewGroup.<init>(ViewGroup.java:279)
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.widget.LinearLayout.<init>(LinearLayout.java:88)
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.widget.TableLayout.<init>(TableLayout.java:90)
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at com.android.demo.notepad1.Drawinterface.drawit(Drawinterface.java:20)
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at com.android.demo.notepad1.CalculatorActivity.onCreate(CalculatorActivity.java:25)
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    02-17 20:32:10.830: ERROR/AndroidRuntime(1222):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
    

    【讨论】:

      【解决方案3】:

      首先不需要为Drawinterface扩展Activity。当您使用 java 代码创建任何视图时。您需要扩展 View 类或它的任何子类。在这里你可以扩展 TableLayout。

      或者最简单的方法是在 xml 中创建布局。 Java 代码在开发甚至理解时都会产生不必要的复杂性(因为它已经在上面的代码中创建)。

      【讨论】:

        猜你喜欢
        • 2015-10-17
        • 1970-01-01
        • 1970-01-01
        • 2017-12-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多