Java 为什么我的代码抛出ClassNotFoundException?

Java 为什么我的代码抛出ClassNotFoundException?,java,android,Java,Android,我试图简单地放置一个图像,dotporen.png,您可以在其中触摸屏幕。很简单,对吧?显然不是,因为图像是一个类,具有属性,所以我可以将其视为动态对象,而不是ImageView。以下是DotCanvas.java的代码: package com.dhg.dots; import android.content.Context; import android.view.View; import android.view.MotionEvent; import android.graphics.

我试图简单地放置一个图像,
dotporen.png
,您可以在其中触摸屏幕。很简单,对吧?显然不是,因为图像是一个类,具有属性,所以我可以将其视为动态对象,而不是ImageView。以下是
DotCanvas.java
的代码:

package com.dhg.dots;

import android.content.Context;
import android.view.View;
import android.view.MotionEvent;
import android.graphics.Canvas;
import android.graphics.Point;

public class DotCanvas extends View {
    private Context mContext;
    public DotCanvas(Context context) {
        super(context);
        setFocusable(true);
        mContext = context;
    }
    private DotBase dot;

    @Override protected void onDraw(Canvas canvas) {
        for (int i = 0; i < DotHandler.dotList.size(); i++) {
            dot = DotHandler.dotList.get(i);
            dot.setY(dot.getY() + 1);

            canvas.drawBitmap(dot.getBitmap(), dot.getX(), dot.getY(), null);
        }
    }

    public boolean onTouchEvent(MotionEvent event) {
        Point dotPoint = new Point();
        dotPoint.x = (int)event.getX();
        dotPoint.y = (int)event.getY();
        new DotPowder(mContext, dotPoint.x, dotPoint.y);
        invalidate();
        return true;
    }
}
package com.dhg.dots;

import android.graphics.Bitmap;
import android.content.Context;
import android.graphics.BitmapFactory;

public class DotBase {
    private Context mContext;
    private Bitmap dotBitmap;

    public DotBase(Context context, float x, float y) {
        DotHandler.addDotToArray(this);
        mContext = context;
        Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.dotpowder);
        dotBitmap = bitmap;
        xCoord = x;
        yCoord = y;
    }

    private float xCoord;
    private float yCoord;

    public void setX(float x) {
        xCoord = x;
    }

    public void setY(float y) {
        yCoord = y;
    }

    public float getX() {
        return xCoord;
    }

    public float getY() {
        return yCoord;
    }

    public void setGraphic(int id) {
        dotBitmap = BitmapFactory.decodeResource(mContext.getResources(), id);
    }

    public Bitmap getBitmap() {
        return dotBitmap;
    }
}
package com.dhg.dots;

import android.content.Context;

public class DotPowder extends DotBase {
    public DotPowder(Context context, float x, float y) {
        super(context, x, y);

        setGraphic(R.drawable.dotpowder);
    }
}
最后,这里是
dotpoond.java

package com.dhg.dots;

import android.content.Context;
import android.view.View;
import android.view.MotionEvent;
import android.graphics.Canvas;
import android.graphics.Point;

public class DotCanvas extends View {
    private Context mContext;
    public DotCanvas(Context context) {
        super(context);
        setFocusable(true);
        mContext = context;
    }
    private DotBase dot;

    @Override protected void onDraw(Canvas canvas) {
        for (int i = 0; i < DotHandler.dotList.size(); i++) {
            dot = DotHandler.dotList.get(i);
            dot.setY(dot.getY() + 1);

            canvas.drawBitmap(dot.getBitmap(), dot.getX(), dot.getY(), null);
        }
    }

    public boolean onTouchEvent(MotionEvent event) {
        Point dotPoint = new Point();
        dotPoint.x = (int)event.getX();
        dotPoint.y = (int)event.getY();
        new DotPowder(mContext, dotPoint.x, dotPoint.y);
        invalidate();
        return true;
    }
}
package com.dhg.dots;

import android.graphics.Bitmap;
import android.content.Context;
import android.graphics.BitmapFactory;

public class DotBase {
    private Context mContext;
    private Bitmap dotBitmap;

    public DotBase(Context context, float x, float y) {
        DotHandler.addDotToArray(this);
        mContext = context;
        Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.dotpowder);
        dotBitmap = bitmap;
        xCoord = x;
        yCoord = y;
    }

    private float xCoord;
    private float yCoord;

    public void setX(float x) {
        xCoord = x;
    }

    public void setY(float y) {
        yCoord = y;
    }

    public float getX() {
        return xCoord;
    }

    public float getY() {
        return yCoord;
    }

    public void setGraphic(int id) {
        dotBitmap = BitmapFactory.decodeResource(mContext.getResources(), id);
    }

    public Bitmap getBitmap() {
        return dotBitmap;
    }
}
package com.dhg.dots;

import android.content.Context;

public class DotPowder extends DotBase {
    public DotPowder(Context context, float x, float y) {
        super(context, x, y);

        setGraphic(R.drawable.dotpowder);
    }
}
当新的
DotBase
被实例化时,就会出现
ClassNotFoundException
,但我不知道为什么

这里是DotHandler.java,主要活动:

package com.dhg.dots;

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

import android.app.Activity;
import android.os.Bundle;

public class DotHandler extends Activity {
    /** Called when the activity is first created. */
    public static List<DotBase> dotList = new ArrayList<DotBase>() {
    private static final long serialVersionUID = -946727550332680940L;
    };
    @Override public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(new DotCanvas(this));
    }

    public static void addDotToArray(DotBase dot) {
        if (dotList.size() == 0) {
            dotList.add(0, dot);
        }
        else {
            dotList.add(dotList.size() + 1, dot);
        }
    }
}
package com.dhg.dots;
导入java.util.ArrayList;
导入java.util.List;
导入android.app.Activity;
导入android.os.Bundle;
公共类DotHandler扩展活动{
/**在首次创建活动时调用*/
公共静态列表点列表=新ArrayList(){
私有静态最终长serialVersionUID=-946727550332680940L;
};
@在创建时覆盖公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(新的点画布(this));
}
公共静态无效添加点阵列(点基点){
if(dotList.size()==0){
点列表。添加(0,点);
}
否则{
添加(dotList.size()+1,点);
}
}
}
这是堆栈跟踪:

java.lang.NullPointerException
    at com.dhg.dots.DotBase.<init>(DotBase.java:17)
    at com.dhg.dots.DotPowder.<init>(DotPowder.java:7)
    at com.dhg.dots.DotCanvas.onTouchEvent(DotCanvas.java:32)
    at android.view.View.dispatchTouchEvent(View.java:3778)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:885)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:885)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:885)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1716)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1124)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2125)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1700)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1802)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:143)
    at android.app.ActivityThread.main(ActivityThread.java:5061)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
java.lang.NullPointerException
    at com.dhg.dots.DotBase.<init>(DotBase.java:17)
    at com.dhg.dots.DotPowder.<init>(DotPowder.java:7)
    at com.dhg.dots.DotCanvas.onTouchEvent(DotCanvas.java:32)
    at android.view.View.dispatchTouchEvent(View.java:3778)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1716)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1124)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2125)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1700)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1802)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:143)
    at android.app.ActivityThread.main(ActivityThread.java:5061)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
java.lang.NullPointerException
    at com.dhg.dots.DotBase.<init>(DotBase.java:17)
    at com.dhg.dots.DotPowder.<init>(DotPowder.java:7)
    at com.dhg.dots.DotCanvas.onTouchEvent(DotCanvas.java:32)
    at android.view.View.dispatchTouchEvent(View.java:3778)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
    at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1716)
    at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1124)
    at android.app.Activity.dispatchTouchEvent(Activity.java:2125)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1700)
    at android.view.ViewRoot.handleMessage(ViewRoot.java:1802)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:143)
    at android.app.ActivityThread.main(ActivityThread.java:5061)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    at dalvik.system.NativeStart.main(Native Method)
java.lang.NullPointerException
位于com.dhg.dots.DotBase(DotBase.java:17)
在com.dhg.dots.dotpoond上
在com.dhg.dots.DotCanvas.onTouchEvent(DotCanvas.java:32)上
在android.view.view.dispatchTouchEvent上(view.java:3778)
位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:885)
位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:885)
位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:885)
在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1716)上
位于com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1124)
位于android.app.Activity.dispatchTouchEvent(Activity.java:2125)
在com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1700)上
在android.view.ViewRoot.handleMessage(ViewRoot.java:1802)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:143)
位于android.app.ActivityThread.main(ActivityThread.java:5061)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
在dalvik.system.NativeStart.main(本机方法)
java.lang.NullPointerException
位于com.dhg.dots.DotBase(DotBase.java:17)
在com.dhg.dots.dotpoond上
在com.dhg.dots.DotCanvas.onTouchEvent(DotCanvas.java:32)上
在android.view.view.dispatchTouchEvent上(view.java:3778)
位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1716)上
位于com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1124)
位于android.app.Activity.dispatchTouchEvent(Activity.java:2125)
在com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1700)上
在android.view.ViewRoot.handleMessage(ViewRoot.java:1802)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:143)
位于android.app.ActivityThread.main(ActivityThread.java:5061)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
在dalvik.system.NativeStart.main(本机方法)
java.lang.NullPointerException
位于com.dhg.dots.DotBase(DotBase.java:17)
在com.dhg.dots.dotpoond上
在com.dhg.dots.DotCanvas.onTouchEvent(DotCanvas.java:32)上
在android.view.view.dispatchTouchEvent上(view.java:3778)
位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
位于android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:958)
在com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1716)上
位于com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1124)
位于android.app.Activity.dispatchTouchEvent(Activity.java:2125)
在com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1700)上
在android.view.ViewRoot.handleMessage(ViewRoot.java:1802)
位于android.os.Handler.dispatchMessage(Handler.java:99)
位于android.os.Looper.loop(Looper.java:143)
位于android.app.ActivityThread.main(ActivityThread.java:5061)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:521)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
在dalvik.system.NativeStart.main(本机方法)
此外,从堆栈跟踪中可以看出,它也开始抛出NullPointerException。

DotBase.java中第17行的方法调用“mContext.getResources()”可能会引发NullPointerException。 DotBase#mContext的来源是DotCanvas类构造函数中的参数“mContext”


请检查通过DotCanvas构造函数传递的对象。

问题确实在这一行:

private Bitmap dotBitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.dotpowder);
这个