2011-08-04 1 views
0

Fondamentalement, j'ai une interface utilisateur libgdx qui lie aux fichiers de niveau qui sont construits à partir d'un interpréteur XML. Sur le bureau, l'application fonctionne bien. Mais quand je l'exécute sur le téléphone, il ne peut pas trouver les fichiers level.xml. Oui, ils sont dans le dossier des actifs, et l'interface utilisateur et la musique sont également. L'interface utilisateur et la musique fonctionnent tous deux très bien, mais lorsque le bouton est cliqué pour démarrer le niveau, j'obtiens des pointeurs NULL et il se bloque parce qu'il ne peut pas trouver le fichier pour une raison étrange.L'application Android de LibGDX peut trouver n'importe quel fichier mais mes fichiers de niveau XML.

Voici le code dans lequel je spécifie le chemin du fichier. Gdx.files.internal référence le dossier assets. Dans le constructeur de XMLInterpreter est où le chemin de fichier est réellement défini. Le code ci-dessous est juste là où je spécifie l'objet XMLInterpreter.

public class Level1 extends Level 
{ 
public Level1(Game game) 
{ 
    super(game); 
} 

ObjectCreator oc; 
int startX; 
int startY; 

@Override 
protected void createWorld(World world) 
{ 
    super.setLevelNum(1); 
    oc = new ObjectCreator(world); 
    XMLInterpreter xml = new XMLInterpreter("data/xmlLevels/level 01.xml"); 
    try 
    { 
     xml.buildDocument(); 
    } 
    catch (ParserConfigurationException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    catch (SAXException e) 
    { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    List<Line_xml> lines = xml.iterateLines(); 
    for(Line_xml line : lines){ 
     ObjectType ot = xml.getType(line.type); 
     oc.createLine(ot, line.x1, line.y1, line.x2, line.y2, line.restitution); 
    } 

    List<Square_xml> squares = xml.iterateSquares(); 
    for(Square_xml square : squares) 
    { 
     ObjectType ot = xml.getType(square.type); 
     oc.createBox(ot, square.height, square.width, square.pos_x, square.pos_y, 0); 
    } 

    List<Circle_xml> circles = xml.iterateCircles(); 
    for(Circle_xml circle : circles) 
    { 
     ObjectType ot = xml.getType(circle.type); 
     startX = (int) circle.x; 
     startY = (int) circle.y; 
     oc.createCircle(ot, circle.radius, circle.x, circle.y, circle.friction, circle.restitution, circle.density); 
    } 
} 

est en dessous du code de la méthode XMLInterpreter buildDocument qui est ce qui est réellement appelé à construire le document. Le code sur lequel nous nous concentrons est la méthode buildDocument. C'est là le filePath:

//Builds document object from factory and prepares for proper reading 
//Also assigns the file handle variable 
public boolean buildDocument() throws ParserConfigurationException, SAXException 
{ 
    try 
    { 
     FileHandle fh = Gdx.files.internal(this.filePath); 
     File xmlF = new File(fh.path()); 
     DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuild = fac.newDocumentBuilder(); 
     this.doc = dBuild.parse(xmlF); 
     this.doc.getDocumentElement().normalize(); 
     this.file_handle = fh; 
    } 
    catch(IOException io) 
    { 
     io.printStackTrace(); 
     return false; 
    } 
} 

Tous les fichiers xml niveau sont stockés dans les actifs de filePath/données/xmlLevels. Les chemins de fichiers sont spécifiés correctement, je crois, mais le LogCat imprime encore ceci:

08-04 12:22:43.401: WARN/System.err(7980): java.io.FileNotFoundException: /data/xmlFiles/level 01.xml (No such file or directory) 
08-04 12:22:43.411: WARN/System.err(7980):  at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 
08-04 12:22:43.411: WARN/System.err(7980):  at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232) 
08-04 12:22:43.411: WARN/System.err(7980):  at java.io.FileInputStream.<init>(FileInputStream.java:80) 
08-04 12:22:43.411: WARN/System.err(7980):  at org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:82) 
08-04 12:22:43.411: WARN/System.err(7980):  at org.apache.harmony.xml.parsers.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:120) 
08-04 12:22:43.411: WARN/System.err(7980):  at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:183) 
08-04 12:22:43.411: WARN/System.err(7980):  at edu.uab.cis.SMART.Wahball.xml.XMLInterpreter.buildDocument(XMLInterpreter.java:92) 
08-04 12:22:43.411: WARN/System.err(7980):  at edu.uab.cis.SMART.Wahball.levels.Level1.createWorld(Level1.java:41) 
08-04 12:22:43.411: WARN/System.err(7980):  at edu.uab.cis.SMART.Wahball.Level.create(Level.java:124) 
08-04 12:22:43.411: WARN/System.err(7980):  at edu.uab.cis.SMART.Wahball.levels.Level1.render(Level1.java:135) 
08-04 12:22:43.421: WARN/System.err(7980):  at com.badlogic.gdx.Game.render(Game.java:43) 
08-04 12:22:43.421: WARN/System.err(7980):  at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:411) 
08-04 12:22:43.421: WARN/System.err(7980):  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1363) 
08-04 12:22:43.421: WARN/System.err(7980):  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118) 
08-04 12:22:43.431: WARN/dalvikvm(7980): threadid=9: thread exiting with uncaught exception (group=0x4001d5a0) 

08-04 12:22:43.441: ERROR/AndroidRuntime(7980): FATAL EXCEPTION: GLThread 14 
08-04 12:22:43.441: ERROR/AndroidRuntime(7980): java.lang.NullPointerException 
08-04 12:22:43.441: ERROR/AndroidRuntime(7980):  at edu.uab.cis.SMART.Wahball.xml.XMLInterpreter.iterateLines(XMLInterpreter.java:176) 
08-04 12:22:43.441: ERROR/AndroidRuntime(7980):  at edu.uab.cis.SMART.Wahball.levels.Level1.createWorld(Level1.java:54) 
08-04 12:22:43.441: ERROR/AndroidRuntime(7980):  at edu.uab.cis.SMART.Wahball.Level.create(Level.java:124) 
08-04 12:22:43.441: ERROR/AndroidRuntime(7980):  at edu.uab.cis.SMART.Wahball.levels.Level1.render(Level1.java:135) 
08-04 12:22:43.441: ERROR/AndroidRuntime(7980):  at com.badlogic.gdx.Game.render(Game.java:43) 
08-04 12:22:43.441: ERROR/AndroidRuntime(7980):  at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:411) 
08-04 12:22:43.441: ERROR/AndroidRuntime(7980):  at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1363) 
08-04 12:22:43.441: ERROR/AndroidRuntime(7980):  at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1118) 

La seule chose qui me déconcerte vraiment au sujet de ce problème est que l'application est uiskin.xml d'accès pour l'interface utilisateur! Et il se trouve dans le dossier des actifs, et il est très bien. Les autorisations de fichier sont définies exactement les mêmes pour les fichiers xml.

Une aide rapide à ce sujet sera grandement appréciée!

Si vous avez besoin de plus d'informations, je serai heureux d'obliger!

Répondre

1

Essayez d'actualiser le dossier des actifs. Si cela ne vous aide pas, essayez de nettoyer votre projet (Projet -> Nettoyer). Parfois, Eclipse n'actualise pas correctement les fichiers dans les dossiers.

0

Utilisez-vous Windows sur votre bureau? S'il vous plaît, vérifiez si le chemin réel sur votre disque a le même cas de lettre.

Je pense que si sur le disque le nom du dossier est XmlLevels (avec "X" en majuscule), vous pouvez avoir le même problème.

0

Faites plutôt un nouveau projet! Même si ce code était correct mais la langue elle-même l'interprète mal.

Questions connexes