Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我第一次运行此应用程序时总是出现空指针错误?_Java_Android_Debugging - Fatal编程技术网

Java 为什么我第一次运行此应用程序时总是出现空指针错误?

Java 为什么我第一次运行此应用程序时总是出现空指针错误?,java,android,debugging,Java,Android,Debugging,在我添加交换和刷新方法之前,它运行良好 MainActivity.java: package com.example.tilegame; import java.util.ArrayList; import java.util.Collections; import java.util.List; import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.ActionBarAc

在我添加交换和刷新方法之前,它运行良好

MainActivity.java:

package com.example.tilegame;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TableRow.LayoutParams;

public class MainActivity extends ActionBarActivity implements OnClickListener 
{
    TableLayout table;
    Button buttons[];
    int count = 0;
    int btnSize = (int)getResources().getDimension(R.dimen.box_size);

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        table = (TableLayout)findViewById(R.id.table);      
        buttons = new Button[9];
        for(int x = 0; x < 9; x++)
        {
            if(x < 8)
            {
                Button btn = createButton(btnSize, false, x+1);
                buttons[x] = btn;
            }
            else if(x == 8)
            {
                Button btn = createButton(btnSize, true, x+1);
                buttons[x] = btn;
            }
        }
        randomizeArray(buttons);
        refresh();
    }

    public void onClick(View v)
    {
        switch(v.getId())
        {
            case 0:
                swap(buttons, v.getId());
                refresh();
                break;

            case 1:
                swap(buttons, v.getId());
                refresh();
                break;

            case 2:
                swap(buttons, v.getId());
                refresh();
                break;

            case 3:
                swap(buttons, v.getId());
                refresh();
                break;

            case 4:
                swap(buttons, v.getId());
                refresh();
                break;

            case 5:
                swap(buttons, v.getId());
                refresh();
                break;

            case 6:
                swap(buttons, v.getId());
                refresh();
                break;

            case 7:
                swap(buttons, v.getId());
                refresh();
                break;
        }
    }

    public Button createButton(int size, boolean blank, int id)
    {
        Button btn = new Button(this);

        LayoutParams buttonParams = new LayoutParams(size, size);
        buttonParams.setMargins(5,5,5,5);
        btn.setLayoutParams(buttonParams);
        btn.setId(id);
        btn.setText(""+btn.getId());
        btn.setOnClickListener(this);
        if(blank == false)
        {
            btn.setBackgroundColor(Color.parseColor("#ffffff"));
        }
        else
        {
            btn.setVisibility(View.INVISIBLE);
        }
        return btn;
    }

    public void randomizeArray(Button[] array)
    {
        List<Button> list = new ArrayList<>();
        for(Button i : array)
        {
            list.add(i);
        }
        Collections.shuffle(list);

        for(int x = 0; x < list.size(); x++)
        {
            array[x] = list.get(x);
        }
    }

    public void refresh()
    {
        table.removeAllViews();
        for(int x = 0; x < 3; x++)
        {
            TableRow row = new TableRow(this);
            for(int y = 0; y < 3; y++)
            {
                row.addView(buttons[count]);
                count++;
            }
            table.addView(row, x);
        }
    }

    public void swap(Button btns[], int id)
    {
        int posClick = 0;
        int posBlank = 0;
        Button temp1 = new Button(this);
        Button temp2 = new Button(this);

        for(int x = 0; x < btns.length; x++)
        {
            if(Integer.parseInt(btns[x].getText().toString()) == id)
            {
                posClick = x;
            }
        }
        for(int x = 0; x < btns.length; x++)
        {
            if(Integer.parseInt(btns[x].getText().toString()) == 9)
            {
                posBlank = x;
            }
        }
        switch(posClick)
        {
            case 0:
                if(posBlank == 1 || posBlank == 3)
                {
                    temp1 = btns[posClick];
                    temp2 = btns[posBlank];
                    btns[posBlank] = temp1;
                    btns[posClick] = temp2;
                }
            case 1:
                if(posBlank == 0 || posBlank == 2 || posBlank == 4)
                {
                    temp1 = btns[posClick];
                    temp2 = btns[posBlank];
                    btns[posBlank] = temp1;
                    btns[posClick] = temp2;
                }
            case 2:
                if(posBlank == 1 || posBlank == 5)
                {
                    temp1 = btns[posClick];
                    temp2 = btns[posBlank];
                    btns[posBlank] = temp1;
                    btns[posClick] = temp2;
                }
            case 3:
                if(posBlank == 0 || posBlank == 4 || posBlank == 6)
                {
                    temp1 = btns[posClick];
                    temp2 = btns[posBlank];
                    btns[posBlank] = temp1;
                    btns[posClick] = temp2;
                }
            case 4:
                if(posBlank == 1 || posBlank == 3 || posBlank == 5 || posBlank == 7)
                {
                    temp1 = btns[posClick];
                    temp2 = btns[posBlank];
                    btns[posBlank] = temp1;
                    btns[posClick] = temp2;
                }
            case 5:
                if(posBlank == 2 || posBlank == 4 || posBlank == 8)
                {
                    temp1 = btns[posClick];
                    temp2 = btns[posBlank];
                    btns[posBlank] = temp1;
                    btns[posClick] = temp2;
                }
            case 6:
                if(posBlank == 3 || posBlank == 7)
                {
                    temp1 = btns[posClick];
                    temp2 = btns[posBlank];
                    btns[posBlank] = temp1;
                    btns[posClick] = temp2;
                }
            case 7:
                if(posBlank == 4 || posBlank == 6 || posBlank == 8)
                {
                    temp1 = btns[posClick];
                    temp2 = btns[posBlank];
                    btns[posBlank] = temp1;
                    btns[posClick] = temp2;
                }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
    {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) 
        {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}
package com.example.tilegame;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.support.v7.app.ActionBarActivity;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.view.OnClickListener;
导入android.widget.Button;
导入android.widget.TableLayout;
导入android.widget.TableRow;
导入android.widget.TableRow.LayoutParams;
公共类MainActivity扩展ActionBarActivity实现OnClickListener
{
表格布局表;
按钮[];
整数计数=0;
int btnSize=(int)getResources().getDimension(R.dimen.box\u size);
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
table=(TableLayout)findviewbyd(R.id.table);
按钮=新按钮[9];
对于(int x=0;x<9;x++)
{
if(x<8)
{
按钮btn=createButton(btnSize,false,x+1);
按钮[x]=btn;
}
else如果(x==8)
{
按钮btn=createButton(btnSize,true,x+1);
按钮[x]=btn;
}
}
随机性(按钮);
刷新();
}
公共void onClick(视图v)
{
开关(v.getId())
{
案例0:
交换(按钮,v.getId());
刷新();
打破
案例1:
交换(按钮,v.getId());
刷新();
打破
案例2:
交换(按钮,v.getId());
刷新();
打破
案例3:
交换(按钮,v.getId());
刷新();
打破
案例4:
交换(按钮,v.getId());
刷新();
打破
案例5:
交换(按钮,v.getId());
刷新();
打破
案例6:
交换(按钮,v.getId());
刷新();
打破
案例7:
交换(按钮,v.getId());
刷新();
打破
}
}
公共按钮createButton(整数大小,布尔空白,整数id)
{
按钮btn=新按钮(此按钮);
LayoutParams ButtonParms=新的LayoutParams(大小、大小);
按钮图。设置边距(5,5,5,5);
btn.setLayoutParams(按钮图);
btn.setId(id);
btn.setText(“+btn.getId());
btn.setOnClickListener(此);
如果(空白==假)
{
btn.setBackgroundColor(Color.parseColor(“#ffffff”));
}
其他的
{
btn.setVisibility(视图不可见);
}
返回btn;
}
公共void randomizerray(按钮[]数组)
{
列表=新的ArrayList();
用于(按钮i:阵列)
{
列表.添加(i);
}
集合。洗牌(列表);
对于(int x=0;x<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/outside"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.tilegame.MainActivity" >

    <TableLayout
        android:id="@+id/table"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#38c0f4"
        android:layout_gravity="center|top" >

        <TableRow
            android:id="@+id/row1">

            <Button
                android:id="@+id/num_1"
                android:layout_width="@dimen/box_size"
                android:layout_height="@dimen/box_size"
                android:background="#FFFFFF"
                android:layout_weight="1"
                android:layout_margin="5dip"
                android:text="@string/num_1">
            </Button>

            <Button
                android:id="@+id/num_2"
                android:layout_width="@dimen/box_size"
                android:layout_height="@dimen/box_size"
                android:background="#FFFFFF"
                android:layout_weight="1"
                android:layout_margin="5dip"
                android:text="@string/num_2">
            </Button>

            <Button
                android:id="@+id/num_3"
                android:layout_width="@dimen/box_size"
                android:layout_height="@dimen/box_size"
                android:background="#FFFFFF"
                android:layout_weight="1"
                android:layout_margin="5dip"
                android:text="@string/num_3">
            </Button>
        </TableRow>

        <TableRow
            android:id="@+id/row2">

            <Button
                android:id="@+id/num_4"
                android:layout_width="@dimen/box_size"
                android:layout_height="@dimen/box_size"
                android:layout_margin="5dip"
                android:layout_weight="1"
                android:background="#FFFFFF"
                android:text="@string/num_4" />

            <Button
                android:id="@+id/num_5"
                android:layout_width="@dimen/box_size"
                android:layout_height="@dimen/box_size"
                android:layout_margin="5dip"
                android:layout_weight="1"
                android:background="#FFFFFF"
                android:text="@string/num_5" />

            <Button
                android:id="@+id/num_6"
                android:layout_width="@dimen/box_size"
                android:layout_height="@dimen/box_size"
                android:layout_margin="5dip"
                android:layout_weight="1"
                android:background="#FFFFFF"
                android:text="@string/num_6" />
        </TableRow>

        <TableRow
            android:id="@+id/row3">

            <Button
                android:id="@+id/num_7"
                android:layout_width="@dimen/box_size"
                android:layout_height="@dimen/box_size"
                android:background="#FFFFFF"
                android:layout_weight="1"
                android:layout_margin="5dip"
                android:text="@string/num_7">
            </Button>

            <Button
                android:id="@+id/num_8"
                android:layout_width="@dimen/box_size"
                android:layout_height="@dimen/box_size"
                android:background="#FFFFFF"
                android:layout_weight="1"
                android:layout_margin="5dip"
                android:text="@string/num_8">
            </Button>

            <Button
                android:id="@+id/blank"
                android:layout_width="@dimen/box_size"
                android:layout_height="@dimen/box_size"
                android:visibility="invisible"
                android:layout_weight="1"
                android:layout_margin="5dip">
            </Button>
        </TableRow>
    </TableLayout>

</LinearLayout>
10-04 02:16:25.797: E/AndroidRuntime(3418): FATAL EXCEPTION: main
10-04 02:16:25.797: E/AndroidRuntime(3418): Process: com.example.tilegame, PID: 3418
10-04 02:16:25.797: E/AndroidRuntime(3418): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.tilegame/com.example.tilegame.MainActivity}: java.lang.NullPointerException
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2253)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.app.ActivityThread.access$900(ActivityThread.java:169)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.os.Handler.dispatchMessage(Handler.java:102)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.os.Looper.loop(Looper.java:136)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.app.ActivityThread.main(ActivityThread.java:5476)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at java.lang.reflect.Method.invokeNative(Native Method)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at java.lang.reflect.Method.invoke(Method.java:515)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at dalvik.system.NativeStart.main(Native Method)
10-04 02:16:25.797: E/AndroidRuntime(3418): Caused by: java.lang.NullPointerException
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.content.ContextWrapper.getResources(ContextWrapper.java:94)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:78)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at com.example.tilegame.MainActivity.<init>(MainActivity.java:24)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at java.lang.Class.newInstanceImpl(Native Method)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at java.lang.Class.newInstance(Class.java:1208)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.app.Instrumentation.newActivity(Instrumentation.java:1067)
10-04 02:16:25.797: E/AndroidRuntime(3418):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2244)
10-04 02:16:25.797: E/AndroidRuntime(3418):     ... 11 more
int btnSize = (int)getResources().getDimension(R.dimen.box_size);
private int btnSize = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Other codes here...
    btnSize = (int) this.getResources().getDimension(R.dimen.box_size);
}