Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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 Android绘图应用程序崩溃_Java_Android_Surfaceview - Fatal编程技术网

Java Android绘图应用程序崩溃

Java Android绘图应用程序崩溃,java,android,surfaceview,Java,Android,Surfaceview,我正在制作一个绘图应用程序,当我按下时,该应用程序会随机崩溃。我不知道如何修复它,也不知道从哪里开始。我不知道是名单还是时间,还是别的什么。这是我的密码: package com.orangewhales.paint.views; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.gr

我正在制作一个绘图应用程序,当我按下时,该应用程序会随机崩溃。我不知道如何修复它,也不知道从哪里开始。我不知道是名单还是时间,还是别的什么。这是我的密码:

package com.orangewhales.paint.views;

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

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;

public class PaintView extends SurfaceView implements Callback {

boolean run = true;
Thread tUpdate;
public List<PaintPath> paths = new ArrayList<PaintPath>();

public Paint stroke = new Paint();

@Override
public void draw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.draw(canvas);

    canvas.drawRGB(255, 255, 255);

    for (PaintPath path : paths) {
        canvas.drawPath(path.path, path.paint);
    }
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    // TODO Auto-generated method stub
    switch(event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        Path current = new Path();
        current.moveTo(event.getX(), event.getY());
        paths.add(new PaintPath(current, stroke));
        break;

    case MotionEvent.ACTION_MOVE:
        PaintPath path = paths.get(paths.size() - 1);
        path.path.lineTo(event.getX(), event.getY());
        break;
    }


    return true;
}

public PaintView(Context context, AttributeSet attrs) {
    super(context, attrs);

    stroke.setStyle(Style.STROKE);
    stroke.setColor(Color.BLACK);
    stroke.setStrokeWidth(10);

    tUpdate = new Thread() {

        public void run() {
            while (run) {
                Canvas c = getHolder().lockCanvas();
                draw(c);
                getHolder().unlockCanvasAndPost(c);

                update();

                try {
                    sleep(10);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

    };

    getHolder().addCallback(this);
}

public void update() {
    // TODO Auto-generated method stub

}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    tUpdate.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    run = false;

    try {
        tUpdate.join();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

}
package com.orangewhates.paint.views;
导入java.util.ArrayList;
导入java.util.List;
导入android.content.Context;
导入android.graphics.Canvas;
导入android.graphics.Color;
导入android.graphics.Paint;
导入android.graphics.Path;
导入android.graphics.Paint.Style;
导入android.util.AttributeSet;
导入android.view.MotionEvent;
导入android.view.SurfaceHolder;
导入android.view.SurfaceHolder.Callback;
导入android.view.SurfaceView;
公共类PaintView扩展了SurfaceView实现回调{
布尔运行=真;
线程更新日期;
公共列表路径=新的ArrayList();
公共绘制笔划=新绘制();
@凌驾
公共空白绘制(画布){
//TODO自动生成的方法存根
超级绘画(画布);
canvas.drawRGB(255、255、255);
用于(绘制路径:路径){
canvas.drawPath(path.path,path.paint);
}
}
@凌驾
公共布尔onTouchEvent(运动事件){
//TODO自动生成的方法存根
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
当前路径=新路径();
current.moveTo(event.getX(),event.getY());
添加(新绘制路径(当前,笔划));
打破
case MotionEvent.ACTION\u移动:
PaintPath=path.get(path.size()-1);
path.path.lineTo(event.getX(),event.getY());
打破
}
返回true;
}
公共画图视图(上下文、属性集属性){
超级(上下文,attrs);
笔划.设置笔划(笔划.笔划);
stroke.setColor(Color.BLACK);
行程设置行程宽度(10);
tUpdate=新线程(){
公开募捐{
while(运行){
Canvas c=getHolder().lockCanvas();
抽签(c);
getHolder().解锁canvasandpost(c);
更新();
试一试{
睡眠(10);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
};
getHolder().addCallback(此);
}
公共无效更新(){
//TODO自动生成的方法存根
}
@凌驾
公共无效表面更改(表面文件夹持有者,整型格式,整型宽度,
整数高度){
//TODO自动生成的方法存根
}
@凌驾
已创建的公共空白表面(表面持有人){
//TODO自动生成的方法存根
tUpdate.start();
}
@凌驾
公共空间表面覆盖(表面覆盖物持有人){
//TODO自动生成的方法存根
运行=错误;
试一试{
tUpdate.join();
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}

我已经有一段时间没有接触我的Android SDK了。因此,我将从一个问题开始

你说过当按下GUI时,应用程序会随机崩溃。在onTouchEvent函数中,哪一个动作首先发生,动作\向下还是动作\移动? 我希望这是一个很好的定义,但我们不能假设

我发现函数“PaintPath path=paths.get(paths.size()-1)”中的代码可疑,因为paths.size一开始可以是0

我认为密切监视TouchEvent上的函数是个好主意,可以使用调试器。如果没有其他信息,请记录消息

修复随机间歇性问题是工作的一部分。从中学习并享受乐趣