从第二个Java文件调用函数时崩溃

从第二个Java文件调用函数时崩溃,java,android,crash,Java,Android,Crash,我对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; i

我对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)没有检测到任何错误。
任何帮助都将不胜感激

而不是使用xml资源文件以编程方式创建表格布局


这里有一个关于这个的教程:

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

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)
02-17 20:00:27.020:DEBUG/dalvikvm(1176):GC在06毫秒内释放了30619个对象/777176字节
02-17 20:32:10.830:错误/AndroidRuntime(1222):由以下原因引起:java.lang.NullPointerException
02-17 20:32:10.830:ERROR/AndroidRuntime(1222):位于android.content.ContextWrapper.getResources(ContextWrapper.java:80)
02-17 20:32:10.830:ERROR/AndroidRuntime(1222):在android.view.view(view.java:1777)上
02-17 20:32:10.830:ERROR/AndroidRuntime(1222):在android.view.ViewGroup。(ViewGroup.java:279)
02-17 20:32:10.830:ERROR/AndroidRuntime(1222):位于android.widget.LinearLayout.(LinearLayout.java:88)
02-17 20:32:10.830:ERROR/AndroidRuntime(1222):在android.widget.TableLayout.(TableLayout.java:90)
02-17 20:32:10.830:ERROR/AndroidRuntime(1222):位于com.android.demo.notepad1.Drawinterface.drawit(Drawinterface.java:20)
02-17 20:32:10.830:ERROR/AndroidRuntime(1222):位于com.android.demo.notepad1.CalculatorActivity.onCreate(CalculatorActivity.java:25)
02-17 20:32:10.830:ERROR/AndroidRuntime(1222):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-17 20:32:10.830:ERROR/AndroidRuntime(1222):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)

首先,无需扩展Drawinterface的活动。当您使用java代码创建任何视图时。您需要扩展视图类或其任何子类。在这里您可以扩展TableLayout


或者最简单的事情是用xml创建布局。Java代码在开发过程中甚至在理解过程中都会造成不必要的复杂性(正如上面代码中已经创建的那样)。

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