【问题标题】:Unable to start activity error with Scene2D无法使用 Scene2D 启动活动错误
【发布时间】:2013-12-26 15:46:06
【问题描述】:

我们正在尝试使用 libGDX 中的 scene2D 绘制一些东西。我们有我们的主要活动,然后使用扩展 Android 应用程序来初始化我们的 testgame 类。这里我们定义我们的屏幕,然后在屏幕类中创建我们的舞台和演员。

问题是我们一遍又一遍地遇到相同的错误: >

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gamepadTest.app/com.gamepadTest.app.MainActivity}: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.gamepadTest.app/com.gamepadTest.app.TestGame}; have you declared this activity in your   AndroidManifest.xml? 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
            Caused by: java.lang.ClassNotFoundException: Didn't find class     "com.gamepadTest.app.MainActivity" on path: DexPathList[[zip file     "/data/app/com.gamepadTest.app-1.apk"],nativeLibraryDirectories=[/data/app-   lib/com.gamepadTest.app-1, /system/lib]]
            at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:53)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
            at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
            

> at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at      com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

看看:

import android.os.Bundle;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration;

public class MainActivity extends AndroidApplication {
    private TestGame testGame = new TestGame();

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();

        initialize(testGame, cfg);
    }
}

import com.badlogic.gdx.Game;

public class TestGame extends Game
{
    TestScreen testScreen;

    @Override
    public void create() {
        testScreen = new TestScreen();
        setScreen(testScreen);
    }

    @Override
    public void dispose() {
        testScreen.dispose();
    }
}

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.scenes.scene2d.Stage;

public class TestScreen implements Screen {

    private Stage stage;
    private TestActor testActor;

    public TestScreen() {
        stage = new Stage();
        Gdx.input.setInputProcessor(stage);
        testActor = new TestActor();
        stage.addActor(testActor);
    }

    public void resize(int width, int height) {
        stage.setViewport(800, 600, false);
        stage.getCamera().translate(-stage.getGutterWidth(), -stage.getGutterHeight(), 0);
    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
        stage.act(delta);
        stage.draw();
    }

    @Override public void dispose() {
        stage.dispose();
    }
    @Override public void show() {}
    @Override public void hide() {}
    @Override public void pause() {}
    @Override public void resume() {}
}

import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.scenes.scene2d.Actor;

public class TestActor extends Actor{

    private ShapeRenderer renderer;

    @Override
    public void act(float delta) {
        super.act(delta);
        renderer = new ShapeRenderer();
    }

    @Override
    public void draw (SpriteBatch batch, float parentAlpha) {
        batch.end();

        renderer.setProjectionMatrix(batch.getProjectionMatrix());
        renderer.setTransformMatrix(batch.getTransformMatrix());
        renderer.translate(getX(), getY(), 0);

        renderer.begin(ShapeRenderer.ShapeType.Point);
        renderer.rect(0, 0, 100, 100);
        renderer.end();

        batch.begin();
    }
}

更新:

这是我的清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gamepadTest.app"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="11"
    android:targetSdkVersion="19" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.gamepadTest.app.MainActivity"
        android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
</manifest>

【问题讨论】:

  • 您能粘贴更多的堆栈跟踪吗? (似乎有些东西试图将您的游戏类放在预期的活动类中)。
  • 我添加了更多堆栈跟踪
  • 乍一看,我在您的代码中看不到任何可疑之处。堆栈跟踪也没有给出我预期的提示。您是使用 gdx-setup-tool 生成项目,还是“手动”创建项目?你用的是eclipse还是android studio?
  • 手动创建,我使用 android studio。然而,我们只是在尝试开发安卓游戏,所以我们所做的看起来与预期的相似。这就是为什么我们无法找出问题所在
  • 你的项目的 libs 文件夹中有 gdx.jar、gdx-backend-android.jar 吗?它们是否标记为“导出到依赖项目”?

标签: java android libgdx scene2d


【解决方案1】:

TestGame 不是 Activity:

public class TestGame extends Game{

您必须声明的 Activity 是 MainActivity。所以它很奇怪,可能你做了另一个同名的活动。但无论如何,请尝试使用点符号而不是整个包来设置它:

<activity
    android:name=".TestGame"
    android:label="@string/app_name" >
</activity>

看到这个: Unable to find explicit activity class

【讨论】:

  • 也不工作,清单确实说要使用 mainactivity 启动活动。但是,当我尝试启动我的应用程序时,我仍然会关机。当试图将 TestGame 声明为活动时,它会出错。我真的很困惑哈哈..
【解决方案2】:

您必须在AndroidManifest.xml 中将您的活动TestGame 声明为&lt;activity&gt;

有关清单的更多信息:http://developer.android.com/guide/topics/manifest/manifest-intro.html

应该看起来像这样,并且需要在&lt;application&gt;-tag 内:

    <activity
        android:name="com.example.TestGame"
        android:label="@string/app_name" >
    </activity>

【讨论】:

  • 已经尝试过了,但仍然给我错误。尝试过 com.gamepadTest.app.TestGame 等。
  • 您不应该这样做,因为您的 TestGame 类不是一个活动,而是 LibGdx 应用程序侦听器。
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
相关资源
最近更新 更多