我是android的新手,我想在android中制作游戏。在该游戏中,我必须绘制画布,我遵循了一个教程来学习“如何在android中绘制画布”。在该教程中,他使用了两个名为GFX和Main的类,他没有显示任何XML文件,因此我使用的是默认的XML,该文件由eclipse编辑器自动填充。
我已按照本教程进行操作,但是当我尝试在设备上运行该应用程序时,设备屏幕上会显示一条消息,不幸的是,Seven已停止。“七个”是我的应用程序名称。“黑球”是我想在屏幕上显示的图像的名称。我已将此图像保存在res / drawable-hdpi文件夹中。以下是代码,我同时添加了两个类,默认XML文件和Logcat。GFX文件。
package com.example.seven;
import android.app.Activity;
import android.os.Bundle;
public class GFX extends Activity
{
Main objec;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
objec=new Main(this);
setContentView(objec);
}
}
主要的
package com.example.seven;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
public class Main extends View
{
Bitmap blackdot;
public Main(Context context) {
super(context);
// TODO Auto-generated constructor stub
blackdot= BitmapFactory.decodeResource(getResources(), R.drawable.blackball);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawColor(Color.YELLOW);
canvas.drawBitmap(blackdot, (canvas.getWidth())/2, 0, null);
}
}
XML文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Main" >
<TextView
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="0dip"
android:text="@string/hello_world" />
</RelativeLayout>
下面是Logcat的输出
03-11 12:26:13.968: D/dalvikvm(8248): newInstance failed: no <init>()
03-11 12:26:13.968: D/AndroidRuntime(8248): Shutting down VM
03-11 12:26:13.968: W/dalvikvm(8248): threadid=1: thread exiting with uncaught exception (group=0x40eca258)
03-11 12:26:13.970: E/AndroidRuntime(8248): FATAL EXCEPTION: main
03-11 12:26:13.970: E/AndroidRuntime(8248): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.seven/com.example.seven.Main}: java.lang.InstantiationException: can't instantiate class com.example.seven.Main; no empty constructor
03-11 12:26:13.970: E/AndroidRuntime(8248): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2001)
03-11 12:26:13.970: E/AndroidRuntime(8248): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2104)
03-11 12:26:13.970: E/AndroidRuntime(8248): at android.app.ActivityThread.access$600(ActivityThread.java:134)
03-11 12:26:13.970: E/AndroidRuntime(8248): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1247)
03-11 12:26:13.970: E/AndroidRuntime(8248): at android.os.Handler.dispatchMessage(Handler.java:99)
03-11 12:26:13.970: E/AndroidRuntime(8248): at android.os.Looper.loop(Looper.java:154)
03-11 12:26:13.970: E/AndroidRuntime(8248): at android.app.ActivityThread.main(ActivityThread.java:4624)
03-11 12:26:13.970: E/AndroidRuntime(8248): at java.lang.reflect.Method.invokeNative(Native Method)
03-11 12:26:13.970: E/AndroidRuntime(8248): at java.lang.reflect.Method.invoke(Method.java:511)
03-11 12:26:13.970: E/AndroidRuntime(8248): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
03-11 12:26:13.970: E/AndroidRuntime(8248): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
03-11 12:26:13.970: E/AndroidRuntime(8248): at dalvik.system.NativeStart.main(Native Method)
03-11 12:26:13.970: E/AndroidRuntime(8248): Caused by: java.lang.InstantiationException: can't instantiate class com.example.seven.Main; no empty constructor
03-11 12:26:13.970: E/AndroidRuntime(8248): at java.lang.Class.newInstanceImpl(Native Method)
03-11 12:26:13.970: E/AndroidRuntime(8248): at java.lang.Class.newInstance(Class.java:1319)
03-11 12:26:13.970: E/AndroidRuntime(8248): at android.app.Instrumentation.newActivity(Instrumentation.java:1023)
03-11 12:26:13.970: E/AndroidRuntime(8248): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1992)
03-11 12:26:13.970: E/AndroidRuntime(8248): ... 11 more
这是清单文件。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.seven"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.seven.GFX"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.GFX" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Caused by: java.lang.InstantiationException: can't instantiate class com.example.seven.Main; no empty constructor
该异常以及在堆栈跟踪中提示框架正在实例化您的活动的原因解释了此问题:您已Main
在清单中将类列为活动。该类不是an Activity
,尽管实例化会较早地失败以丢失空的构造函数(因为您已经覆盖了构造函数),而在后来将创建的对象强制转换为时失败了Activity
。
似乎GFX
是您的主要活动。
要解决此问题,请将Main
活动从清单更改为GFX
。
在你编辑的问题,保持action
为MAIN
在这里:
<action android:name="android.intent.action.GFX" />
改成
<action android:name="android.intent.action.MAIN" />
您可以在其中指定应用程序的主要入口点,该名称与您的代码无关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句