4

プログラムをロードしようとすると、「アクティビティをインスタンス化できません」というエラーが表示されます。私を当惑させることの 1 つは、まったく同じコードが私の古い PC でも機能することです。新しいEclipse / Android SDK /などを使用して新しいものを作成しました。両方のマシンで同じコードを実行していますが、一方は正常に動作し、もう一方はこのエラーを返します。

何かご意見は?

編集:スタックで気づいたことの1つは

原因: java.lang.ClassNotFoundException: com.voldaran.puzzle.graBLOX.PopActivity in loader dalvik.system.PathClassLoader[/data/app/com.voldaran.puzzle.graBLOX-2.apk]

graBLOX-2.apk がリストされています。「-2.apk」を使用しているのはなぜですか?

作業中のマシンでこのエラーを手動で再現すると、最後の [] 部分が表示されません。

Android マニフェスト

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".PopActivity"
              android:label="@string/app_name"
              android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
              android:finishOnTaskLaunch="true"
              android:configChanges="orientation|keyboardHidden"
              android:screenOrientation="portrait"
              >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

スタック

 04-21 17:33:42.284: E/AndroidRuntime(4045): FATAL EXCEPTION: main
04-21 17:33:42.284: E/AndroidRuntime(4045): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.voldaran.puzzle.graBLOX/com.voldaran.puzzle.graBLOX.PopActivity}: java.lang.ClassNotFoundException: com.voldaran.puzzle.graBLOX.PopActivity in loader dalvik.system.PathClassLoader[/data/app/com.voldaran.puzzle.graBLOX-2.apk]
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1569)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.os.Looper.loop(Looper.java:130)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.main(ActivityThread.java:3683)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at java.lang.reflect.Method.invokeNative(Native Method)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at java.lang.reflect.Method.invoke(Method.java:507)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at dalvik.system.NativeStart.main(Native Method)
04-21 17:33:42.284: E/AndroidRuntime(4045): Caused by: java.lang.ClassNotFoundException: com.voldaran.puzzle.graBLOX.PopActivity in loader dalvik.system.PathClassLoader[/data/app/com.voldaran.puzzle.graBLOX-2.apk]
04-21 17:33:42.284: E/AndroidRuntime(4045):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
04-21 17:33:42.284: E/AndroidRuntime(4045):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
4

4 に答える 4

8

私はほとんど同じ状況を経験していました (プロジェクトは最初に 32 ビット マシンで作成され、次に別の 64 ビット マシンにインポートされました)。

Eclipse Juno (64 ビット) の Android プロジェクト:

  • 「プロジェクト エクスプローラー」でプロジェクトを右クリックし、「プロパティ」を選択します。
  • 左側のリストで「Java ビルド パス」を選択します。
  • 「注文とエクスポート」タブをクリックします。
  • 「Android Private Libraries」と「Android Dependencies」の 2 つのチェックボックスをそれぞれマークし、[OK] ボタンをクリックします。
  • プロジェクトをクリーンアップして実行します。
于 2013-06-20T05:04:35.203 に答える
2

これを試して。このコードを内部に追加しPopActivity 、デフォルトのコンストラクター内からこの関数を呼び出します。

private static void fixClassLoaderIssue()
{
ClassLoader myClassLoader = MyClass.class.getClassLoader();
Thread.currentThread().setContextClassLoader(myClassLoader);
}  

同様の問題があり、これで修正されました。この解決策は、問題が存在する理由を実際には解決していませんが、実際にはそれを見つけることができませんでした。
参考までに、この回答を確認してください。

于 2012-04-21T23:04:23.853 に答える
0

私の場合、 AndroidManifest ファイルのパッケージ名が間違っていました。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    *package="com.app"*
    android:versionCode="1"
    android:versionName="1.0" >
于 2014-05-03T07:34:56.977 に答える
0

プロジェクトのクリーンを試しましたか? それは通常、私のクラスローダーの問題を解決します。

于 2012-04-21T23:37:24.747 に答える