【问题标题】:Android app force closes when painting a ball?画球时Android应用程序强制关闭?
【发布时间】:2012-10-05 22:15:18
【问题描述】:

我正在尝试在屏幕上绘制一个球,但它强制关闭。出了点问题。

Ball b = new Ball();

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ingame);
    start();
}

private void start() {
    Ball b = new Ball();
}

public void paint(Graphics g) {
    b.paint(g);
    g.setColor(Color.GREEN);
    g.fillOval(x-radius, y-radius, radius*2, radius*2);
}

这是我的 LogCat:

10-15 21:02:45.492: E/dalvikvm(7847): 找不到类 'com.game.src.Ball',引用自方法 com.jordan.bungee.bounce.Cracka。 10-15 21:02:45.492: W/dalvikvm(7847): VFY: 无法解析 Lcom/jordan/bungee/bounce/Cracka 中的新实例 417 (Lcom/game/src/Ball;); 10-15 21:02:45.492: D/dalvikvm(7847): VFY: 在 0x002b 处替换操作码 0x22 10-15 21:02:45.492: D/dalvikvm(7847): VFY: Lcom/jordan/bungee/bounce/Cracka 中的死代码 0x002d-0032;。 ()V 10-15 21:02:45.496: E/dalvikvm(7847): 找不到类 'com.game.src.Ball',引用自方法 com.jordan.bungee.bounce.Cracka.start 10-15 21:02:45.496: W/dalvikvm(7847): VFY: 无法解析 Lcom/jordan/bungee/bounce/Cracka 中的新实例 417 (Lcom/game/src/Ball;);

10-15 21:02:45.496: D/dalvikvm(7847): VFY: 在 0x0000 处替换操作码 0x22

10-15 21:02:45.500: D/dalvikvm(7847): VFY: Lcom/jordan/bungee/bounce/Cracka 中的死代码 0x0002-0005;.start ()V

10-15 21:02:45.500: W/dalvikvm(7847): VFY: 无法找到签名中引用的类 (Ljava/awt/Graphics;)

10-15 21:02:45.503: I/dalvikvm(7847): 找不到方法 com.game.src.Ball.paint,引用自方法 com.jordan.bungee.bounce.Cracka.paint

10-15 21:02:45.503: W/dalvikvm(7847): VFY: 无法解析虚拟方法 3021: Lcom/game/src/Ball;.paint (Ljava/awt/Graphics;)V

10-15 21:02:45.503: D/dalvikvm(7847): VFY: 在 0x0002 处替换操作码 0x6e

10-15 21:02:45.503: D/dalvikvm(7847): VFY: Lcom/jordan/bungee/bounce/Cracka 中的死代码 0x0005-001f;.paint (Ljava/awt/Graphics;)V

10-15 21:02:45.507: D/AndroidRuntime(7847): 关闭虚拟机

10-15 21:02:45.507: W/dalvikvm(7847): threadid=1: 线程以未捕获的异常退出 (group=0x4001e578) 10-15 21:02:45.527:E/AndroidRuntime(7847):致命异常:主要

10-15 21:02:45.527: E/AndroidRuntime(7847): java.lang.NoClassDefFoundError: com.game.src.Ball

10-15 21:02:45.527: E/AndroidRuntime(7847): at com.jordan.bungee.bounce.Cracka.(Cracka.java:22)

10-15 21:02:45.527: E/AndroidRuntime(7847): at java.lang.Class.newInstanceImpl(Native Method)

10-15 21:02:45.527: E/AndroidRuntime(7847): at java.lang.Class.newInstance(Class.java:1409)

10-15 21:02:45.527:E/AndroidRuntime(7847):在 android.app.Instrumentation.newActivity(Instrumentation.java:1021)

10-15 21:02:45.527:E/AndroidRuntime(7847):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1565)

10-15 21:02:45.527:E/AndroidRuntime(7847):在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)

10-15 21:02:45.527: E/AndroidRuntime(7847): at android.app.ActivityThread.access$1500(ActivityThread.java:117)

10-15 21:02:45.527: E/AndroidRuntime(7847): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)

10-15 21:02:45.527: E/AndroidRuntime(7847): at android.os.Handler.dispatchMessage(Handler.java:99)

10-15 21:02:45.527: E/AndroidRuntime(7847): 在 android.os.Looper.loop(Looper.java:130)

10-15 21:02:45.527: E/AndroidRuntime(7847): 在 android.app.ActivityThread.main(ActivityThread.java:3687)

10-15 21:02:45.527: E/AndroidRuntime(7847): at java.lang.reflect.Method.invokeNative(Native Method)

10-15 21:02:45.527: E/AndroidRuntime(7847): at java.lang.reflect.Method.invoke(Method.java:507)

10-15 21:02:45.527: E/AndroidRuntime(7847): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)

10-15 21:02:45.527: E/AndroidRuntime(7847): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)

10-15 21:02:45.527: E/AndroidRuntime(7847): at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 抛出的错误是什么?检查您的 LogCat 以找到根本原因。发布,我们会尽力提供帮助。
  • 请发布 LogCat 错误,以便我们查看发生了什么。
  • @Jordan - 在 Eclipse 中(我猜你正在使用它,因为你有 eclipse 标签),底部的一个窗口应该被称为“LogCat”。将过滤器设置为“错误”,然后当应用程序崩溃时,它应该以红色打印 20-30 行详细说明崩溃情况。突出显示这些行并将它们复制到您的帖子中。
  • 一件事是肯定的。错误不在您显示的代码中,因为您调用的唯一代码是 start() 并且所做的只是创建一个新的 Ball 实例。因此,要么您没有显示相关代码,要么错误在 Ball 的构造函数中。
  • @Simon 这就是我拥有的所有代码......我现在将 LogCat 放在我原来的帖子中。

标签: java android eclipse logcat


【解决方案1】:

我不确定您为什么要在 start() 方法中定义局部变量 b,因为您已经将其定义为类成员。你在 start() 中创建的那个将在 start() 返回时丢失。

另外:您创建的成员对象将在调用 onCreate() 之前很久就被实例化。为成功创建 Ball() 创建 Activity 时是否有足够的上下文可用?如果没有看到 Ball() 的源代码,我们无法判断。

您的 logcat 输出表明未找到 Ball 的类。你写了吗?您是否将它放在 Eclipse 可以找到的正确目录中?

这个问题和您的后续行动似乎表明您对 Android 编程非常陌生,并且可能对 Java 很陌生。如果您是 Java 新手,我会认为这么快就尝试学习 Android 是一件好事。 Android 不是适合初学者的编程环境。

也就是说,我建议您先学习一些教程来熟悉系统。然后,要编写您自己的应用程序,请找到与您正在尝试做的最相似的教程,复制它并开始进行修改。我几乎总是通过复制旧项目来开始新项目。这样,您就知道文件系统布局等可能是正确的。

最后,在 Eclipse 窗口的底部,您将看到一个标有“问题”的选项卡。这对于找出问题所在非常有用。在您的情况下,关于为什么找不到 Ball 的解释可能就在那里。当然,还要检查您的控制台和 Logcat 选项卡。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2017-02-23
    • 2011-10-14
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多