Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.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 简单if语句似乎没有执行部分代码_Java_Android_If Statement - Fatal编程技术网

Java 简单if语句似乎没有执行部分代码

Java 简单if语句似乎没有执行部分代码,java,android,if-statement,Java,Android,If Statement,当我按下按钮时,下面的代码被调用。如果currentImageButton为空,并且它的Drawable为空(这将是它第一次被调用),则只需将消息打印到控制台即可。否则,将画布的背景设置为可绘制文件夹中的图像。我知道这种情况有时是真的,因为在第一次按下按钮后,“currentImageButton确实有一个图形缓存” ImageButton imageButton = (ImageButton) view; if (currentImageBut

当我按下按钮时,下面的代码被调用。如果
currentImageButton
为空,并且它的
Drawable
为空(这将是它第一次被调用),则只需将消息打印到控制台即可。否则,将画布的背景设置为可绘制文件夹中的图像。我知道这种情况有时是真的,因为在第一次按下按钮后,
“currentImageButton确实有一个图形缓存”

            ImageButton imageButton = (ImageButton) view;

            if (currentImageButton != null && currentImageButton.getDrawable() != null) {

                Drawable myDrawable = getResources().getDrawable(R.drawable.start_checklist_pressed);
                Bitmap anImage      = ((BitmapDrawable) myDrawable).getBitmap();
                canvas.drawBitmap(anImage);

                System.out.println("currentImageButton DOES have a drawing cache");
            } else {
                System.out.println("currentImageButton has no drawing cache");

            }

            currentImageButton = imageButton;
但是,当条件为true时,画布的背景永远不会设置。奇怪的是,我知道这些代码行是有效的,因为当我把最后一行放在第一行下面时,一切都完美地工作了,尽管这一行似乎与背景是否设置完全无关。此代码适用于:

            ImageButton imageButton = (ImageButton) view;
            currentImageButton = imageButton;

            if (currentImageButton != null && currentImageButton.getDrawable() != null) {

                Drawable myDrawable = getResources().getDrawable(R.drawable.start_checklist_pressed);
                Bitmap anImage      = ((BitmapDrawable) myDrawable).getBitmap();
                canvas.drawBitmap(anImage);

                System.out.println("currentImageButton DOES have a drawing cache");
            } else {
                System.out.println("currentImageButton has no drawing cache");

            }
这是怎么回事

编辑

还有一件奇怪的事。如果我将条件更改为或:

if (currentImageButton != null || currentImageButton.getDrawable() != null)
我在这一行得到一个空指针异常。在检查null时,如何可能引发null指针异常

java.lang.NullPointerException
        at com.brettrosen.atls.fragments.PrearrivalPlan$6.onClick(PrearrivalPlan.java:416)
        at android.view.View.performClick(View.java:4192)
        at android.view.View$PerformClick.run(View.java:17327)
        at android.os.Handler.handleCallback(Handler.java:725)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:5019)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
        at dalvik.system.NativeStart.main(Native Method)
EDIT2

currentImageButton作为全局变量声明如下:

public ImageButton currentImageButton;
EDIT3

我当前的实现。第一次单击按钮时,它无法正常工作。第二次单击时,它通过了条件,但画布的背景仍未设置

             Drawable d = imageButton.getDrawable();

            if (d != null) {
                Drawable myDrawable = getResources().getDrawable(R.drawable.start_checklist_pressed);
                Bitmap anImage      = ((BitmapDrawable) myDrawable).getBitmap();
                canvas.drawBitmap(anImage);

                System.out.println("worked");
            } else {
                System.out.println("didnt work");
            }

我在这里看到的问题是,您的
currentImageButton
可能正在使用一些垃圾引用进行初始化,因此不等于null的值将变为有效值,然后调用您的
currentImageButton.getDrawable()
,这将导致内部调用中出现NPE。在有效的代码中,在if条件之前有
currentImageButton=imageButton

我相信这应该能解决问题

public ImageButton currentImageButton=null;

我在这里看到的问题是,您的
currentImageButton
可能正在使用一些垃圾引用进行初始化,因此不等于null的值将变为有效值,然后调用您的
currentImageButton.getDrawable()
,这将导致内部调用中出现NPE。在有效的代码中,在if条件之前有
currentImageButton=imageButton

我相信这应该能解决问题

public ImageButton currentImageButton=null;

|
必须对这两条语句求值,看看它们是否都是真的。因此,如果
currentImageButton
null
,它仍然需要检查
currentImageButton.getDrawable()
是否为
null
,并且。。。NPE.您应该共享stacktrace,让任何人告诉您为什么会得到空点您不显示
currentImageButton
声明的位置,但是在使用之前设置值与在使用之后设置值不能期望做相同的事情。在第一个版本中,您使用的是它之前可能具有的任何值。PrearrivalPlan.java中第416行的内容是什么?一个完整的stacktrace在这里调试会很方便。(您没有在这里包括stacktrace的一部分引起的)执行以下操作:public ImageButton currentImageButton=null<代码>| |必须计算这两个语句,以查看它们是否都是真的。因此,如果
currentImageButton
null
,它仍然需要检查
currentImageButton.getDrawable()
是否为
null
,并且。。。NPE.您应该共享stacktrace,让任何人告诉您为什么会得到空点您不显示
currentImageButton
声明的位置,但是在使用之前设置值与在使用之后设置值不能期望做相同的事情。在第一个版本中,您使用的是它之前可能具有的任何值。PrearrivalPlan.java中第416行的内容是什么?一个完整的stacktrace在这里调试会很方便。(您没有在这里包括stacktrace的一部分引起的)执行以下操作:public ImageButton currentImageButton=null;我试图使用更好的实现,并将if语句更改为
Drawable d=imageButton.getDrawable()
if(((BitmapDrawable)d).getBitmap()!=null){
,但这会抛出一个NPE。我不明白检查null是如何抛出一个NPE的?@Brejuro:拥有完整的堆栈跟踪将非常方便。此外,也许你应该修改你的问题,为任何人提供更多细节,以便复制你的问题。@Brejuro如果图像按钮上没有可绘制的设置,请调用
ImageButtonn、 getDrawable()
将返回null。因此,
d.getBitmap()
中的变量
d
引用的是`null,您在那里得到了NPE。我正在尝试使用更好的实现,我将if语句更改为
Drawable d=imageButton.getDrawable();
if((BitmapDrawable)d)。GetBitBitmap()!=null){
,但这会抛出一个NPE。我不明白检查null是如何抛出一个NPE的?@Brejuro:拥有完整的堆栈跟踪将非常方便。此外,也许你应该修改你的问题,为任何人提供更多细节,以便复制你的问题。@Brejuro如果图像按钮上没有可绘制的设置,请调用
ImageButtonn、 getDrawable()
将返回null。因此,在
d.getBitmap()
中,变量
d
引用的是`null,您在那里得到了NPE。