Errore irreversibile dell’ambiente di runtime Java

Sto eseguendo un caso di test di junit

Ho ricevuto il seguente errore,

A fatal error has been detected by the Java Runtime Environment: Internal Error (classFileParser.cpp:3174), pid=2680, tid=2688 Error: ShouldNotReachHere() JRE version: 6.0_18-b07 Java VM: Java HotSpot(TM) Client VM (16.0-b13 mixed mode windows-x86 ) 

Qualunque corpo può suggerire la soluzione da risolvere

Ho avuto lo stesso problema, ma con un sacco di google ho trovato la risposta! Vedi questa pagina

Citazione dal link:


 # An unexpected error has been detected by Java Runtime Environment: # # Internal Error (classFileParser.cpp:2924), pid=5364, tid=6644 # Error: ShouldNotReachHere 
  1. Questo perché stiamo usando l’implementazione dello stub JUnit di Android. Vai a Esegui -> Esegui come -> Esegui nuovamente le configurazioni e nella configurazione JUnit appena creata Classpath’s Bootstrap Entries rimuovi Android Library
  2. Quindi aggiungi libreria, usando il pulsante Avanzate … e aggiungi JRE System Library e JUnit 3
  3. Applica e corri

Prova questo, ha funzionato per me.

Avrai bisogno di prenderlo con Sun – mi sembra un bug JVM. Se è riproducibile, dovresti essere in grado di eseguire java in modo tale da generare più dettagli (es. -Verbose, ecc.). Se riesci a ridurlo a un caso minimale che triggers il bug (il codice sorgente ti aiuta sempre!), Anche questo è molto lungo.

http://java.sun.com/developer/technicalArticles/bugreport_howto/index.html

http://bugreport.sun.com/bugreport/crash.jsp

Nel frattempo, si potrebbe voler provare con un’implementazione JVM diversa (forse anche un livello di patch precedente di Sun JRE).

Vai a Esegui come -> Esegui configurazioni … e seleziona la configurazione che stai utilizzando.
Selezionare la scheda Percorso class e selezionare voci BootStrap .
Fare clic su Avanzate , quindi su Aggiungi libreria e selezionare Libreria di sistema JRE .
Portalo su e rendilo la prima voce nella lista BootstrapEntries.

Applica ed esegui …

Un’altra ansible spiegazione: guasto dell’hardware. Escludere se è ansible riprodurre l’errore su macchine diverse.

Ho risolto questo

  • Chiudi eclipse
  • Elimina le directory bin e gen nel tuo progetto
  • Avvia eclipse
  • Ricostruisci il tuo progetto

Recentemente ho trovato una soluzione per questo problema che è stato pubblicato da devdanke :

“A partire dall’11 luglio 2010 e Android 2.1, il lavoro che utilizzo è quello di separare i test in classi diverse.Tutti i test che non chiamano API Android vanno nelle loro classi. Per ognuna di queste classi, Rimuovo il riferimento ad Android nella loro configurazione di Run, scheda Percorso di class. ”

Il problema con l’averlo configurato class per class non è quindi ansible eseguire tutti i test nel progetto. Un approccio migliore sta creando 2 progetti di test con diversi set di librerie.

È ansible creare un progetto Android JUnit Test standard seguendo il link e la class di test di esempio è simile a:

 import android.test.AndroidTestCase; public class ConverterTest extends AndroidTestCase { public void testConvert() { assertEquals("one", "one"); } } 

Quindi il progetto JUnit Test può essere convertito dal progetto Android JUnit Test rimuovendo la libreria Android dal percorso di generazione del progetto e aggiungendo la libreria di sistema JRE e la libreria JUnit 3 e la class di test di esempio è simile a:

 import junit.framework.TestCase; public class ConverterTest extends TestCase{ public void testConvert() { assertEquals("one", "one"); } } 

Ho avuto un problema simile, ho scoperto che era perché avevo generato una nuova attività con una voce di stub principale []. Una volta cancellato il codice principale [] dalla nuova attività templatye, l’errore è andato via.

YMMV

Questo potrebbe essere un bug JVM; vedere la risposta di @ Zac. Ma potrebbe anche essere che il tuo caso di test di junit stia causando il caricamento di un file bytecode corrotto. Prova a ribuild tutti i tuoi file .class e, se ciò non risolve il problema, prova a recuperare le librerie esterne da cui dipende il tuo codice.

Corri su una piattaforma supportata (Windows, una delle poche versioni di Linux?) In caso contrario, è il primo da provare.

Se sei su una piattaforma supportata, esegui il downgrade a _17 e verifica se THAT aiuta.

Quindi fai un bug report a Sun e spera che lo aggiusteranno un giorno (a meno che tu non voglia dare loro i soldi per sistemarlo più velocemente).

Vai a Esegui come -> Esegui configurazioni-> percorso di class-> Voci BootStrap Fare clic su Avanzate, quindi Aggiungi libreria e selezionare Libreria di sistema JRE come prima voce. Applica ed esegui …

Non sono sicuro che tu sia riuscito a raggiungere la soluzione per il tuo problema o meno, ma la tua domanda è appena spuntata mentre stavo cercando la soluzione per lo stesso problema che sto affrontando. E ho ottenuto una soluzione dallo stack stesso, quindi ho pensato di condividere un link con te se questo ti aiuta con qualsiasi mezzo. Il collegamento è come qui sotto:

Imansible eseguire il test case JUnit 4 nel progetto Eclipse Android

Un’altra ansible ragione (per riferimenti futuri): ho accidentalmente copiato un metodo principale nel mio codice, facendo sì che Eclipse riconoscesse il progetto come un’applicazione java, avviandolo quindi con quella configurazione.

Per risolverlo sono andato su Esegui> Esegui configurazioni … e poi ho cambiato dalla mia presunta principale in applicazione java all’attività principale della mia applicazione Android semplicemente scegliendolo nella colonna di sinistra.