ljw930824 2015-04-23 09:09 采纳率: 100%
浏览 1799
已采纳

Android 开发的程序eclipse没报错,但意外停止

目的是编写一个单点触摸用户输入的例子,以下是程序代码

package com.example.ontouchlistenerdemo;

import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.*;
import android.os.Bundle;
import android.view.*;
import android.view.View.OnTouchListener;

public class Game extends Activity implements OnTouchListener {

DrawView drawView;

Point touch = new Point(0,0);
String inputAction= "";

@Override

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
drawView = new DrawView(this);
setContentView(drawView);

    drawView.setOnTouchListener(this);
}

public void onResume(){
    super.onResume();
    drawView.resume();
}
public void onPause(){
    super.onPause();
    drawView.pause();
}

public boolean onTouch(View v,MotionEvent event){
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        inputAction = "DOWN";
        break;

    case MotionEvent.ACTION_MOVE:
        inputAction = "MOVE";
        break;

    case MotionEvent.ACTION_UP:
        inputAction = "UP";
        break;

    }
    touch.x = (int)event.getX();
    touch.y = (int)event.getY();

    return true;
}

public class DrawView extends SurfaceView implements Runnable
{
    Thread gameloop = null;

    SurfaceHolder surface = null;

    volatile boolean running = false;

    AssetManager assets = null;

    public DrawView(Context context)
    {
        super(context);
        surface = getHolder();
        assets = context.getAssets();
    }
    public void resume(){
        running = true;
        gameloop = new Thread(this);
        gameloop.start();
    }
    public void pause(){
        running = false;
        while(true){
            try{
                gameloop.join();
            }catch(InterruptedException e){}
        }
    }
    public void run(){
        while(running)
        {
            if(!surface.getSurface().isValid())
                continue;

            Canvas canvas = surface.lockCanvas();
            canvas.drawColor(Color.BLACK);

            Paint paint= new Paint();
            paint.setColor(Color.WHITE);
            paint.setTextSize(24);
            canvas.drawText("Touch screen to test single touch input", 10, 20, paint);
            canvas.drawText("Action: " +inputAction, 10, 50, paint);
            canvas.drawText("Position: "+touch.x+","+touch.y,10 ,80, paint);

            if(touch.x != 0&& touch.y!=0)
                canvas.drawCircle(touch.x, touch.y, 50, paint);

            surface.unlockCanvasAndPost(canvas);

            try{
                Thread.sleep(20);
            }catch(InterruptedException e)
            {
                e.printStackTrace();
            }

        }
    }
}
}

然后是Log的报错

04-23 09:05:03.901: E/AndroidRuntime(350): FATAL EXCEPTION: main
04-23 09:05:03.901: E/AndroidRuntime(350): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.ontouchlistenerdemo/com.example.ontouchlistenerdemo.MainActivity}: java.lang.ClassNotFoundException: com.example.ontouchlistenerdemo.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.ontouchlistenerdemo-1.apk]
04-23 09:05:03.901: E/AndroidRuntime(350): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
04-23 09:05:03.901: E/AndroidRuntime(350): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-23 09:05:03.901: E/AndroidRuntime(350): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-23 09:05:03.901: E/AndroidRuntime(350): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-23 09:05:03.901: E/AndroidRuntime(350): at android.os.Handler.dispatchMessage(Handler.java:99)
04-23 09:05:03.901: E/AndroidRuntime(350): at android.os.Looper.loop(Looper.java:123)
04-23 09:05:03.901: E/AndroidRuntime(350): at android.app.ActivityThread.main(ActivityThread.java:3683)
04-23 09:05:03.901: E/AndroidRuntime(350): at java.lang.reflect.Method.invokeNative(Native Method)
04-23 09:05:03.901: E/AndroidRuntime(350): at java.lang.reflect.Method.invoke(Method.java:507)
04-23 09:05:03.901: E/AndroidRuntime(350): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-23 09:05:03.901: E/AndroidRuntime(350): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-23 09:05:03.901: E/AndroidRuntime(350): at dalvik.system.NativeStart.main(Native Method)
04-23 09:05:03.901: E/AndroidRuntime(350): Caused by: java.lang.ClassNotFoundException: com.example.ontouchlistenerdemo.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.example.ontouchlistenerdemo-1.apk]
04-23 09:05:03.901: E/AndroidRuntime(350): at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
04-23 09:05:03.901: E/AndroidRuntime(350): at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
04-23 09:05:03.901: E/AndroidRuntime(350): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
04-23 09:05:03.901: E/AndroidRuntime(350): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
04-23 09:05:03.901: E/AndroidRuntime(350): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
04-23 09:05:03.901: E/AndroidRuntime(350): ... 11 more
谢谢大家看下,帮个忙看看是什么错误

  • 写回答

5条回答 默认 最新

  • sirnuo 2015-04-29 06:20
    关注

    找不到类 com.example.ontouchlistenerdemo.MainActivity
    你应该在 Androidmanifest.xml 文件中,把MainActivity改为你的自定义类 Game
    所有需要显示的Activity,都要在 Androidmanifest.xml 文件中声明。相关信息,可以百度搜索,google搜索
    activity Androidmanifest.xml

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题