这个 Java 类可以顺利编译,但是当我使用我的 android 手机作为 ADB 时单击它。它说设备已停止工作

Posted

技术标签:

【中文标题】这个 Java 类可以顺利编译,但是当我使用我的 android 手机作为 ADB 时单击它。它说设备已停止工作【英文标题】:This Java class compiles smoothly but when I click on this when using my android phone as ADB. It says the device has stopped working 【发布时间】:2015-06-28 16:59:02 【问题描述】:

这是造成问题的类,因为在编写该类之前,程序在手机上运行良好。 所以我认为问题出在这门课上。 请查看问题。

JAVA 类:

package com.boston.ppp.boston;




import java.util.Random;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.InputType;
import android.view.Display; 
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.ToggleButton;

/**
* Created by ppp on 4/19/2015.
*/
public class TextPlay extends Activity implements View.OnClickListener 
 Button b;
ToggleButton tog;
EditText ed;
TextView tex;
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.text);
    arnavbhai();
    tog.setOnClickListener(this);
    b.setOnClickListener(this);


private void arnavbhai() 
    b = (Button) findViewById(R.id.button1);
    tog = (ToggleButton) findViewById(R.id.togglebutton);
    ed = (EditText) findViewById(R.id.etcommand);
    tex = (TextView) findViewById(R.id.tvresults);



@Override
public void onClick(View v) 
    switch (v.getId())
        case R.id.button1:
            String check = ed.getText().toString();
            tex.setText(check);
            if (check.contentEquals("left")) 
                tex.setGravity(Gravity.LEFT);
            

            if (check.contentEquals("right")) 
                tex.setGravity(Gravity.RIGHT);
            
            if (check.contentEquals("center")) 
                tex.setGravity(Gravity.CENTER);
            
            if (check.contains("WTF")) 
                Random crazy = new Random();
                tex.setText("WTF");
                tex.setTextSize(crazy.nextInt(75));
                tex.setTextColor(Color.rgb(crazy.nextInt(265),crazy.nextInt(265),crazy.nextInt(265)));
                switch(crazy.nextInt(3))
                
                    case 0:
                        tex.setGravity(Gravity.LEFT);
                        break;
                    case 1:
                        tex.setGravity(Gravity.RIGHT);

                        break;
                    case 2:
                        tex.setGravity(Gravity.CENTER);

                        break;
                
            
            else 
                tex.setText("invalid");
                tex.setGravity(Gravity.CENTER);
                tex.setTextColor(Color.WHITE);
            
            break;
        case R.id.togglebutton:
            if (tog.isChecked()) 
                ed.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
             else 
                ed.setInputType(InputType.TYPE_CLASS_TEXT);
            
            break;
    

错误显示

04-21 18:18:02.157    8024-8024/com.boston.ppp.boston W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41662d40)
04-21 18:18:02.161    8024-8024/com.boston.ppp.boston E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.boston.ppp.boston, PID: 8024
java.lang.RuntimeException: Unable to start activity ComponentInfocom.boston.ppp.boston/com.boston.ppp.boston.TextPlay: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
        at android.app.ActivityThread.access$800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5086)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.NullPointerException
        at com.boston.ppp.boston.TextPlay.onCreate(TextPlay.java:32)
        at android.app.Activity.performCreate(Activity.java:5248)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
        at android.app.ActivityThread.access$800(ActivityThread.java:139)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5086)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
        at dalvik.system.NativeStart.main(Native Method)
04-21 18:20:23.527    8024-8024/com.boston.ppp.boston I/Process﹕ Sending signal. PID: 8024 SIG: 9

【问题讨论】:

您好,按钮(togglebuttonbutton1)是否存在于您的布局文件中?如果您能向我们展示布局文件,那就太好了。 【参考方案1】:

错误在第 32 行。

您必须找到您的 UI 元素并在代码中定义它们。比如:

b = (Button) findViewById(R.id.ID_OF_BUTTON);
tog = (ToggleButton) findViewById(R.id.ID);

然后,你就可以调用监听器了。

【讨论】:

先生,我已经在下面的 arnavbhai() 方法中初始化了 tog 和 b,并在使用它之前调用了这个方法。【参考方案2】:

您正在访问 togb 而不进行初始化,这会导致 NPE。添加

tog = (ToggleButton) findViewById(R.id.idOfTOG);
b = (Button)  findViewById(R.id.idOfButton);

onCreate 之前调用setOnClickListener

【讨论】:

我已经在下面的 arnavbhai() 方法中初始化了 tog 和 b 并在使用它之前调用了这个方法。私人无效 arnavbhai() b = (Button) findViewById(R.id.button1); tog = (ToggleButton) findViewById(R.id.togglebutton); ed = (EditText) findViewById(R.id.etcommand); tex = (TextView) findViewById(R.id.tvresults); 【参考方案3】:

好吧,根据您的评论。我认为问题是因为这个

布局

<Button 
    android:layout_ 
    android:layout_ 
    android:layout_weight="20" 
    android:text="New Button" 
    android:id="@+id/bresults" 
/> 
<ToggleButton 
    android:layout_ 
    android:layout_ 
    android:layout_weight="80" 
    android:checked="true" 
    android:paddingBottom="10dp" 
    android:id="@+id/togglebutton"
/>

代码

Button b;
ToggleButton tog;

@Override
protected void onCreate(Bundle savedInstanceState) 
    arnavbhai();
    tog.setOnClickListener(this); 
    b.setOnClickListener(this);   <-- seems this part is throwing NPE


private void arnavbhai() 
    b = (Button) findViewById(R.id.button1); <-- shouldn't it be R.id.bresults ?
    tog = (ToggleButton) findViewById(R.id.togglebutton);

【讨论】:

【参考方案4】:

TextPlay.onCreate() 第 32 行抛出了 NullPointerException。它就在堆栈跟踪中。

现在,您可以 * 附加一个调试器并逐步执行该方法,查找空引用,或者 * 跟踪你的类的设置,看看空引用可能来自哪里

【讨论】:

这几乎没有必要 - 可以简单地查看程序的第 32 行,看看那里引用了什么。

以上是关于这个 Java 类可以顺利编译,但是当我使用我的 android 手机作为 ADB 时单击它。它说设备已停止工作的主要内容,如果未能解决你的问题,请参考以下文章

Wildfly 14 找不到 JDK 类

java 获取当前类的路径

程序编译后 JDBC 不工作

如何动态编译和加载外部 java 类? [复制]

MinGW 的编译器选项 Wl,--kill-at 不起作用

IPPL 与 Matlab 编译器运行时 (MCR)