2013-06-04 5 views
1

J'essaie d'apprendre la programmation android et je crée une application qui commence par un écran de démarrage et charge une classe de menu après cela. le problème est que je reçois cette exceptionClasse Non trouvé Exception Android

06-04 10:59:37.166: E/AndroidRuntime(926): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.em.example1.MENU" on path: /data/app/com.em.example1-1.apk 

Je comprends ce que les états d'exception, mais je ne comprends pas pourquoi cela se produit. Dans ma classe d'écran de démarrage je charge l'activité de menu comme celui-ci

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 
    Thread timer = new Thread() { 
     public void run() { 
      try { 
       sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } finally { 
       Intent mainApp = new Intent("com.em.example1.MENU"); 
       startActivity(mainApp); 

      } 
     } 
    }; 
    timer.start(); 

et la classe de menu est défini dans le fichier manifeste comme celui-ci

<activity 
     android:name="com.em.example1.MENU" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="com.em.example1.MENU" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

Quand je chargeais une activité principale avec deux boutons et une étiqueter tout fonctionnait bien. Mais quand je l'ai changé (à l'intérieur de mon activité d'écran de démarrage) de sorte qu'il chargerait l'activité du menu, il continue à me donner cette erreur.

Merci à l'avance

+3

et la classe de menu est nommé MENU? s'il vous plaît signaler cette activité aussi. –

+0

http://developer.android.com/training/articles/perf-anr.html. Utiliser sleep() dans un thread est un mauvais design. vérifiez le lien – Raghunandan

+0

http://stackoverflow.com/questions/16643177/changing-image-in-imageview-using-threads/16643267#16643267. pour l'écran de démarrage. Utilisation de splash est considéré comme un mal par certains http://cyrilmottier.com/2012/05/03/splash-screens-are-evil-dont-use-them/ – Raghunandan

Répondre

0

Il se trouve que je l'erreur était trop simple à réaliser ...... J'ai eu le mot Menu capitalisée dans Android Manifest au nom et non seulement dans le nom de l'action . Merci d'essayer de m'aider tout le monde

3

Faites un clic droit sur vos propriétés goto du projet. Chemin de construction Java. Choisissez l'onglet Exportation de commande. Assurez-vous que Android Private Libraries est sélectionné. Si vous avez référencé le projet de bibliothèque. Faites de même pour le projet de bibliothèque. Nettoyer et construire.

+0

en tant que commentaire – Raghunandan

2

Peut-être que vous devriez utiliser ceci:

Intent mainApp = new Intent(this,com.em.example1.MENU.class); 
startActivity(mainApp); 
1

les choses f dans le manifeste avant ce que vous avez énumérés est quoi? Ce que vous cherchez est de voir quel est le nom du paquet de l'application.

1

Essayez de modifier cette ligne dans votre fichier manifeste.

<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

Et aussi essayer cette chose

Essayez d'aller à Project -> Properties -> Java Build Path -> Order & Export et assurer des bibliothèques privées Android sont vérifiés pour votre projet et pour tous les autres projets de bibliothèque que vous utilisez. Nettoyez ensuite tous les projets et voyez ce qui se passe.

+0

donc je devrais changer du paquet à une intention principale d'action? est-ce votre suggestion? (J'essaie de comprendre cela, et pas seulement le lancer et être heureux que ça marche) –

2

Vous pouvez utiliser ce code, j'ai apporté quelques modifications. il peut être u .. aide

protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 
    Thread timer = new Thread() { 
     public void run() { 
      try { 
       sleep(5000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } finally { 
       MENU.this.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         Intent mainApp = new Intent(MENU.this,com.em.example1.MENU.class); 
         MENU.this.startActivity(mainApp); 
        } 
       }); 


      } 
     } 
    }; 
timer.start(); 
+0

Si vous implémentez Thread ou HandlerThread, assurez-vous que votre thread UI ne bloque pas en attendant que le thread de travail se termine-n'appelle pas Thread .wait() ou Thread.sleep(). pas un bon design. http://developer.android.com/training/articles/perf-anr.html – Raghunandan

+0

Aucune instance englobante du type Menu n'est accessible dans la portée c'est l'erreur que je reçois –

Questions connexes