2010-07-09 18 views
16

Cuando comienzo mi (pronto-para-ser) juego de Android (de eclipse) se abre, pero de inmediato se cierra forzosamente.android force close: ClassNotFoundException para la clase de actividad

Logcat dice:

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 

la línea interesante aquí es (creo):

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

Lo que me sorprende, porque tengo esta clase (en el paquete derecha)

editar: para aclarar, agregué la primera línea que había omitido (junto con las importaciones)

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() { 
    } 
} 

y eso es todo lo que hace!

También registrado en el manifiesto:

<?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> 

edición: todo esto ha empezado desde que cambió el nombre de la actividad de juego de ritmo a RhythmGameActivity, pero estoy bastante seguro de que sustituye todas las referencias, así que quizás ¿Todavía está mal escrito en alguna parte? (Intenté refrescar y limpiar el proyecto)

Su ayuda es muy apreciada, ¡estoy atascado!

+0

Eso es extraño ... prueba Build -> Clean del menú de Eclipse, y asegúrate de que tus archivos de clase estén realmente en el mismo proyecto que tu Manifiesto y en la carpeta src/org/anselm/eickhoff/rhythm, para empezar. ¿Puede importar y ejecutar cualquiera de los proyectos de ejemplo que se entregan con el SDK en Eclipse? –

+0

Limpié el proyecto, las muestras funcionan y esto solía funcionar también, pero cambié el nombre de RhythmGame a RhythmGameActivity y eso lo rompió. (ver pregunta actualizada) –

+0

tengo exactamente el mismo problema – clamp

Respuesta

13

uso Perforce con Eclipse y he descubierto que el comportamiento por defecto de Perforce de hacer todos los archivos bajo control de origen de solo lectura causa problemas de compilación que no están claramente especificados en la ventana de compilación de Eclipse. Además, parece haber una peculiaridad para mí al agregar un proyecto de biblioteca donde, incluso si el archivo .classpath y el archivo .project son de escritura, la biblioteca puede no asociarse correctamente con el proyecto. Por lo general, sigo estos pasos para resolver errores de esta naturaleza (esto supone que el manifiesto del proyecto es correcto):

1) Cierre Eclipse. Eclipse puede almacenar en caché alguna información sobre el estado R/W de un archivo.

2) (Trazo general) Haga que todos los archivos del proyecto se puedan escribir ya sea mediante el control de origen o mediante el sistema operativo. .classpath y .project al mínimo deben ser de escritura.

2.5) Si colocó archivos bajo el control de código fuente que se generan durante el proceso de compilación y son una parte normal del proceso de compilación de Android, entonces deberían eliminarse del control de código fuente y hacerse escribibles. Incluyendo, pero no limitado a .class y archivos en los directorios bin y gen.

3) Abra el proyecto en Eclipse. Si no hay errores, el problema puede solucionarse.

4) Examine el explorador del proyecto y busque específicamente las dependencias del proyecto de la biblioteca que pueden faltar. En mi experiencia, es importante ver todos los directorios de proyectos lib y el icono de estado de su biblioteca en la jerarquía de exploradores de su proyecto. Si falta una carpeta e ícono del proyecto lib, vaya a Propiedades-> Android y seleccione y agregue las libretas faltantes. Después de agregar una lib, seleccione "Aplicar" un reloj al explorador del proyecto para asegurarse de que aparezca el ícono lib en el directorio del proyecto. Esta explicación paso a paso puede parecer demasiado detallada, pero me han mordido varias veces antes de forzarme a ser observante adicional aquí. Si no se agrega una lib, intente agregar otro proyecto de lib dummy y eliminarlos en combinación con la lib que desee. No es broma, esto a veces es necesario para mí.

5) Limpie todos los proyectos.

6) Lea la lista de errores y resuelva cualquier otro error.

7) Arregle todas las advertencias que ha estado posponiendo.

8) (No es esencial pero es importante) Revierte todos los archivos sin cambios y observa lo que queda en tu lista de cambios: estos son los archivos que necesitarán tu atención en el futuro para evitar problemas de compilación.

+0

esto parece similar a la respuesta de Martin, pero la de usted es más exhaustiva, por lo que la haré la aceptada. –

+0

¡Gracias! Lo mantendré y lo agregaré - las ediciones aplicadas arriba. – jchristof

-2

Tal vez su configuración de ejecución se refiere al nombre anterior. Haga clic en el pequeño triángulo junto al botón de ejecución verde y seleccione Ejecutar configuraciones. Asegúrese de que el de este proyecto se refiera al nombre de la actividad correcta. O simplemente elimínelo y Eclipse lo convertirá automáticamente en uno nuevo.

+0

Thx Voy a intentar esto tan pronto como 1. mi internet funciona nuevamente y 2. he resuelto un problema de conectividad USB bastante molesto con mi HTC Hero (dispositivo de prueba) (situación normal, todo listo *) –

+0

Intenté configurar específicamente la actividad correcta en la configuración de ejecución y luego de eliminarla y dejar que eclipse haga una nueva. sigue siendo el mismo error en ambos casos ... –

4

No es realmente una solución, pero esto esté arreglado que:

la creación de un nuevo proyecto desde cero y migrar el código

Por favor, cierre esta si algo así es posible aquí.

¡Gracias por todas sus ideas y pensamientos!

+0

debe haber una solución "significativa" a este problema – clamp

+0

He tenido este mismo problema. La única solución fue como se describe. Apesta sin embargo tener que hacer eso. Parece que realmente debe haber una mejor respuesta. – etteyafed

5

Tuve este problema una vez cuando mi aplicación de trabajo de repente comenzó a lanzar ClassNotFoundException. El problema era que las clases no se estaban compilando y traduciendo al archivo "dex", esto es obvio de encontrar porque el APK simplemente se contrae.

Por lo tanto, en eclipse, para solucionarlo simplemente agregue el javabuilder a su archivo .project.

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

Espero que ayude.

+0

No puedo reproducir mi error, pero parece ser la misma cosa y una solución, así que lo contaré como la respuesta correcta. –

+0

La respuesta de Joseph + mi comentario parecen hacer esto automáticamente, así que hice la respuesta correcta, ¡aunque gracias! –

+0

Hombre! ¡Me salvaste un par de horas! Tuve el mismo problema cuando revisamos nuestro SVN, el nuevo proyecto no tenía un Java Builder. Gracias. –

4

Acabo de tener este mismo problema. Estaba volviendo loco. Emulador/adb/y eclipse completamente reiniciado y lo arregló. Cosas extrañas ...

+0

Tuve este problema una vez más y esto lo solucionó esta vez: seleccione Proyecto, F5, limpie todos los proyectos. –

+0

Pasé una hora tratando de descubrir por qué mi compilación de lanzamiento se bloqueó al arrancar mientras mi compilación de depuración funcionaba perfectamente. Finalmente reinicié Eclipse y reconstruí la compilación de lanzamiento, y todo se solucionó. Estaba agradecido y enojado al mismo tiempo. –

5

Intenta corregir .classpath.

Tenía el mismo problema causado por el archivo corrupto .classpath. Después de solucionarlo, ClassNotFoundException desapareció.

El trasfondo es que estamos usando SVN, una actualización provocó un conflicto en .classpath. Eclipse, sin embargo, no mostró ningún mensaje de error o sugerencia al respecto. Solo me enteré cuando traté de enviar los cambios actuales.

La solución aquí era hacer una nueva verificación de SVN del proyecto, por lo que se restauró una versión de trabajo de .classpath.

+0

También puede simplemente eliminar el archivo .classpath y volver a llenarlo desde cero (no olvide reiniciar eclipse). En mi caso, esto solucionó el problema. –

4

Cambiaste tu nombre en Eclipse. Verifique que haya cambiado el nombre con el subpaquete correctamente. En mi caso se elimina el punto:

incorrecto: ui.MyActivity

Fix: .ui.MyActivity

4

Tuve el mismo problema y, en mi caso, me olvidé de poner una biblioteca en el Manifiesto de Android.Yo tenía una actividad de Mapa y me había olvidado de poner:

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

lo tanto, debe asegurarse de que tiene toda su biblioteca incluye en su manifiesto.

9

Acabo de tener el mismo problema. Después de actualizar ADT a la versión más nueva, mi carpeta

lib
ya no se reconoce. Tuve que cambiarle el nombre a
libs
Ahora: ¿realmente tienen que lanzar un nuevo SDK cada 5 minutos? ¿No pueden crear UN ambiente estable por más tiempo?

+0

No puedo creer que funcionó. ¡Muy apreciado! – Den

+0

Esto funcionó perfecto para mí. Ojalá las cosas permanezcan igual. – metric152

1

Recibí este error en FragmentActivity después de actualizar el SDK a Android 4. La razón era que ya no era necesario que incluyeras el android-support-v4.jar. Simplemente agregue las herramientas de soporte haciendo clic con el botón derecho del mouse en su Proyecto, que con Herramientas de Android -> Agregar biblioteca de soporte.

1

Sé que no es su problema, pero tuve exactamente el mismo problema. De repente, mi aplicación dejó de funcionar. Me didint hacer ningún cambio a manifestarse, pero con algún accidente no faltaba primera fila:

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

Esto causó ClassNotFoundException para la actividad de lanzamiento. Estuve luchando con eso por algunas horas y lo pasé por alto cada vez que revisaba el manifiesto por posible error.

Algo extraño sucedió después de haber eliminado esta fila nuevamente. Suprise, la aplicación de sorpresa todavía estaba funcionando. (Y yo no se debe reconstruir aplicación)

Esperanza esta ayuda a alguien para salvar a las pocas horas.

Cuestiones relacionadas