Подтвердить что ты не робот

Сила android close: ClassNotFoundException для класса Activity

Когда я запускаю свою (скоро будущую) игру для Android (от затмения), она открывается, но сразу же принудительно закрывается.

Logcat говорит:

07-09 17:12:35.709: ERROR/AndroidRuntime(3866): Uncaught handler: thread main exiting due to uncaught exception
07-09 17:12:35.719: ERROR/AndroidRuntime(3866): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.anselm.eickhoff.rhythm/org.anselm.eickhoff.rhythm.RhythmGameActivity}: java.lang.ClassNotFoundException: org.anselm.eickhoff.rhythm.RhythmGameActivity in loader [email protected]
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2497)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2621)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.access$2200(ActivityThread.java:126)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1932)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.os.Looper.loop(Looper.java:123)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.main(ActivityThread.java:4595)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at java.lang.reflect.Method.invokeNative(Native Method)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at java.lang.reflect.Method.invoke(Method.java:521)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at dalvik.system.NativeStart.main(Native Method)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866): Caused by: java.lang.ClassNotFoundException: org.anselm.eickhoff.rhythm.RhythmGameActivity in loader [email protected]
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2489)
07-09 17:12:35.719: ERROR/AndroidRuntime(3866):     ... 11 more

интересная строка здесь (я думаю):

07-09 17:12:35.719: ERROR/AndroidRuntime(3866): Caused by: java.lang.ClassNotFoundException: org.anselm.eickhoff.rhythm.RhythmGameActivity in loader [email protected]

Что меня удивляет, потому что у меня этот класс (в правильном пакете)

edit: чтобы уточнить, добавлена ​​первая строка, которую я пропустил (вместе с импортом)

package org.anselm.eickhoff.rhythm;
...
public class RhythmGameActivity extends Activity {


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    }

    @Override
    public void onPause() {
    }
}

и что все, что он делает!

Я также зарегистрировал его в манифесте:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="org.anselm.eickhoff.rhythm"
      android:versionCode="1" android:versionName="pre-alpha">

    <uses-permission android:name="android.permission.INTERNET" />
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true" android:hasCode="false">

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

</manifest> 

edit: все это началось с тех пор, как я переименовал действие из RhythmGame в RhythmGameActivity, но я уверен, что я заменил все ссылки, поэтому, возможно, он по-прежнему ошибочно чья-то где-то? (Я попробовал обновить и очистить проект)

Ваша помощь действительно оценена - я застрял!

4b9b3361

Ответ 1

Я использую Perforce с Eclipse и обнаружил, что поведение Perforce по умолчанию делает все файлы под контролем источника доступными только для чтения, вызывает проблемы с построением, которые явно не указаны в окне сборки Eclipse. Кроме того, для меня есть причуда при добавлении проекта библиотеки, где даже если файлы .classpath и .project доступны для записи, библиотека может неправильно ассоциироваться с проектом. Обычно я выполняю эти шаги для разрешения ошибок такого характера (это предполагает, что манифест проекта верен):

1) Закрыть Eclipse. Eclipse может кэшировать некоторую информацию о состоянии файла R/W.

2) (Широкий штрих) Сделайте все файлы в проекте доступными для записи либо путем проверки их из источника управления, либо через ОС..classpath и .project с минимальным минимумом должны быть доступны для записи.

2.5) Если вы разместили файлы под контролем источника, которые генерируются во время процесса сборки и являются нормальной частью процесса сборки Android, их следует удалить из исходного элемента управления и сделать доступным для записи. Включая, но не ограничиваясь, класс и файлы в каталоги bin и gen.

3) Откройте проект в Eclipse. Если ошибок нет, проблема может быть исправлена.

4) Изучите проводник проекта и посмотрите конкретно на зависимости проектов библиотек, которые могут отсутствовать. По моему опыту важно увидеть все каталоги проектов lib и их значок статуса библиотеки в иерархии проводника проекта. Если отсутствует папка и значок проекта lib, перейдите в "Свойства- > Android" и выберите и добавьте недостающие библиотеки. После добавления библиотеки выберите "Применить" к просмотру проводника проекта, чтобы убедиться, что значок lib появляется в каталоге проекта. Это объяснение шага может показаться чрезмерно подробным, но меня несколько раз укусили, прежде чем заставить себя быть дополнительным наблюдателем здесь. Если lib не будет добавлен, попробуйте добавить другой проект dummy lib и удалить их в сочетании с требуемой библиотекой. Нет шутки - это иногда необходимо для меня.

5) Очистите все проекты.

6) Прочитайте список ошибок и устраните любые другие ошибки.

7) Исправьте все предупреждения, которые вы исправляли.

8) (Не важно, но важно). Верните все неизменные файлы и посмотрите, что осталось в списке изменений. Это файлы, которые понадобятся вам в будущем, чтобы предотвратить проблемы с построением.

Ответ 2

Просто такая же проблема. После обновления ADT до последней версии моя папка

lib
больше не распознается. Пришлось переименовать его в
libs
Теперь: действительно ли им нужно выпускать новый SDK каждые 5 минут? Разве они не могут создать ОДНУ стабильную среду в течение более длительного времени?

Ответ 3

У меня была эта проблема, когда мое рабочее приложение внезапно начало бросать ClassNotFoundException. Проблема заключалась в том, что классы не компилировались и не переводились в файл dex, это очевидно, потому что APK просто сжимается.

Итак, в eclipse, чтобы исправить это, просто добавьте javabuilder в ваш .project файл.

<buildCommand>
  <name>org.eclipse.jdt.core.javabuilder</name>
  <arguments>
  </arguments>
</buildCommand>

Надеюсь, что это поможет.

Ответ 4

Попробуйте исправить .classpath.

Была та же проблема, вызванная поврежденным файлом .classpath. После его исправления ClassNotFoundException исчез.

Фон состоит в том, что мы используем SVN, обновление вызвало конфликт в .classpath. Однако в Eclipse не было сообщений об ошибках или намека на это. Я только узнал, когда пытался представить текущие изменения.

Решение здесь состояло в том, чтобы выполнить новую проверку SVN проекта, поэтому была восстановлена ​​рабочая версия .classpath.

Ответ 5

На самом деле это не решение, но это исправлено:

создание нового проекта с нуля и перенос кода

Закройте это, если что-то вроде этого возможно.

Спасибо за все ваши идеи и мысли!

Ответ 6

Просто эта же проблема. Сошел с ума. Полностью перезапущен эмулятор/adb/и eclipse, и он исправил его. Странные вещи...

Ответ 7

Вы переименовали в Eclipse. Дважды проверьте, правильно ли он переименован в подпакет. В моем случае он удалил точку:

Неверно: ui.MyActivity

Исправление:.ui.MyActivity

Ответ 8

У меня была такая же проблема, и в моем случае я забыл поместить библиотеку в манифест Android. У меня была активность MapView, и я забыл поставить:

<uses-library android:name="com.google.android.maps"/>.

Итак, вы должны убедиться, что в свою манифесту включена ваша библиотека.

Ответ 9

Я получил эту ошибку в FragmentActivity после обновления SDK до Android 4. Причина в том, что вам больше не нужно включать поддержку android-v4.jar. Просто добавьте инструменты поддержки, щелкнув правой кнопкой мыши в своем проекте, чем Инструменты Android → Добавить библиотеку поддержки.

Ответ 10

Я знаю, что это не ваша проблема, но у меня была такая же проблема. Внезапно мое приложение перестало работать. Я не делал никаких изменений в манифесте, но с некоторой ошибкой отсутствовала первая строка:

<?xml version="1.0" encoding="utf-8"?>

Это вызвало ClassNotFoundException для активности запуска. Я боролся с этим в течение нескольких часов, и я упускал из виду это каждый раз, когда я проверял манифест за возможную ошибку.

Странная вещь произошла после того, как я снова удалил эту строку. Приложение Suprise, suprise все еще работает. (и я не забыл перестроить приложение)

Надеюсь, что это поможет кому-то сэкономить несколько часов.

Ответ 11

Возможно, ваша конфигурация запуска относится к старому имени. Нажмите на маленький треугольник рядом с кнопкой зеленого запуска и выберите "Запуск конфигурации". Убедитесь, что для этого проекта указано правильное название деятельности. Или просто удалите его, и Eclipse автоматически сделает вас новым.