为什么我得到java.lang.ArithmeticException:除以零

马萨德:

E / AndroidRuntime:致命例外:主进程:com.marsad.wallapp,PID:20425 java.lang.ArithmeticException:除以零

嗨,当我单击gif图像以应用为动态壁纸时,大多数情况下一切正常,但有时应用崩溃并显示错误

Logcat

E / AndroidRuntime:致命例外:主进程:com.marsad.wallpaperapp,PID:20425 java.lang.ArithmeticException:在com.marsad.wallpaperapp.GIFWallpaperService $ GIFWallpaperEngine.draw(GIFWallpaperService.java:139)处被零除。 com.marsad.wallapp.GIFWallpaperService $ GIFWallpaperEngine $ 1.run(GIFWallpaperService.java:111)上的marsad.wallpaperapp.GIFWallpaperService $ GIFWallpaperService.java:82)在android.os.Handler.handleCallback(Handler.java: 873),位于java.android.app.ActivityThread.main(ActivityThread.java:7139),位于android.os.Looper.loop(Looper.java:224),位于android.os.Handler.dispatchMessage(Handler.java:99)。 com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:536)上的lang.reflect.Method.invoke(本地方法)com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876) )

这是完整的代码


public class GIFWallpaperService extends WallpaperService {
    Context context;


    @Override
    public WallpaperService.Engine onCreateEngine() {

        Singleton b = Singleton.getInstance();
        String path = b.getPath();


        try {
            InputStream is = new FileInputStream(path);
            Movie movie = Movie.decodeStream(is);

            return new GIFWallpaperEngine(movie);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
            Toast.makeText(context, "Error: " + e.getMessage(), Toast.LENGTH_SHORT).show();
            return null;
        }
        

    }


    private class GIFWallpaperEngine extends WallpaperService.Engine {

        private final int frameDuration = 20;
        private SurfaceHolder holder;
        private Movie movie;
        private boolean visible;
        private Handler handler;

        int width;
        int height;

        public GIFWallpaperEngine(Movie movie) {

            this.movie = movie;
            handler = new Handler();

        }

        @Override
        public void onCreate(SurfaceHolder surfaceHolder) {
            super.onCreate(surfaceHolder);

            this.holder = surfaceHolder;

        }

        private Runnable drawGIF = new Runnable() {
            @Override
            public void run() {
                draw();
            }
        };

        private void draw() {

            WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
            Display display = wm.getDefaultDisplay();
            float screenWidth = display.getWidth();
            float screenHeight = display.getHeight();

            width = (int) screenWidth;
            height = (int) screenHeight;


            if (visible) {
                Canvas canvas = holder.lockCanvas();
                canvas.save();


                canvas.scale((float) display.getWidth() / (float) movie.width(),
                        (float) display.getHeight() / (float) movie.height());
                movie.draw(canvas, 0, 0);


                canvas.restore();

                holder.unlockCanvasAndPost(canvas);
                movie.setTime((int) (System.currentTimeMillis() % movie.duration()));

                handler.removeCallbacks(drawGIF);
                handler.postDelayed(drawGIF, frameDuration);

            }

        }

        @Override
        public void onVisibilityChanged(boolean visible) {
            //super.onVisibilityChanged(visible);

            this.visible = visible;

            if (visible) {
                handler.post(drawGIF);
            } else {
                handler.removeCallbacks(drawGIF);
            }


        }

        @Override
        public void onSurfaceDestroyed(SurfaceHolder holder) {
            super.onSurfaceDestroyed(holder);
            this.visible = false;
            handler.removeCallbacks(drawGIF);
        }

        @Override
        public void onSurfaceChanged(SurfaceHolder holder, int format,
                                     int width, int height) {
            this.width = width;
            this.height = height;
            super.onSurfaceChanged(holder, format, width, height);
        }
        

        @Override
        public void onDestroy() {
            super.onDestroy();
            handler.removeCallbacks(drawGIF);

        }


    }

}

奥马尔:

您可以像这样在抽奖之前检查一下

if(movie.width() > 0 && movie.height() > 0){
        canvas.scale((float) display.getWidth() / (float) movie.width(),
                (float) display.getHeight() / (float) movie.height());
        movie.draw(canvas, 0, 0);
}else{
        //do something default which suit your application
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

java.lang.ArithmeticException:在清除表中除以零

奇怪的崩溃“ java.lang.ArithmeticException除以零”

除以零并不总是抛出 java.lang.ArithmeticException

为什么用浮点数(或双精度)将数字除以零不会在Java中抛出java.lang.ArithmeticException:/

Java除以零不会引发ArithmeticException-为什么?

java.lang.ArithmeticException:/减零

Primefaces异常INFO:java.lang.ArithmeticException:/零java.lang.ArithmeticException:/零

当两个值都为double时,为什么没有ArithmeticException(除以零)?

运行程序时,我收到“ java.lang.ArithmeticException:/减零”

为什么我得到:java.lang.UnsatisfiedLinkError

为什么我得到 java.lang.NumberFormatException: For input string: "∞"?

为什么我得到错误“ java.lang.ArrayIndexOutOfBoundsException”

为什么我得到:java.lang.NullPointerException?

为什么我得到零而不是 1?

java.lang.ClassCastException:android.widget.TextView。我为什么得到这个?

为什么我得到一个Enum值上的java.lang.NoSuchFieldError :?

为什么我得到java.lang.RuntimeException:无法启动活动ComponentInfo

我得到错误'java.lang.String'并且不知道为什么

为什么我的testNG测试得到java.lang.OutOfMemoryError

无法弄清楚为什么我得到了java.lang.NullPointerExceptio

不知道为什么我得到“无法解析方法'getSystemService(java.lang.String)”

快速零除以零得到NAN

为什么Redshift给我除以零的误差?

为什么这给我除以零错误

为什么我得到的异常,而在本地主机给输入“java.lang.IllegalArgumentException异常:目标对象不能为空”?

为什么我得到此异常java.lang.IllegalArgumentException:比较方法违反了其常规协定

为什么我得到Java.lang.IllegalArgumentException:使用反射使用varargs调用方法时参数数目错误

为什么我在这里得到零除错误?

为什么我总是得到零时差?