2016-03-30 4 views
0

Mein Ziel: Die Kamera versucht, die Position des Geländes zu ermitteln und sie live zu verfolgen, damit ich sehen kann, wo sie platziert wird. Sobald ich auf den Knopf klicke, wird das Gelände an dieser Stelle hinzugefügt. Der Grund für die Kamera ist zu finden, wo ich das Terrain platziere, damit ich es nicht an der falschen Stelle platziere, aber ich muss die Kameraposition aktualisieren, dann wo der Terrainstandort ist, wenn ich etwas eintippe.Java-Fehler: NumberFormatException

Mein Problem: Ok, das Problem ist, dass ich einen Editor gui habe, um den resiveTex zu ändern, also kann ich sehen, wie sich die Kamera mit dem Ort des Terrains bewegt, den ich "live" hinzufüge. Aber es scheint zu brechen, wenn ich einen neuen Wert eingib, plsss mir helfen, indem sie mir sagen, was los ist, habe ich versucht, es zu suchen, aber es ist ein bisschen verwirrend!

Fehler:

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at entities.Camera.TerLocToFloat(Camera.java:39) 
at entities.Camera.move(Camera.java:47) 
at Run.MainLoop.main(MainLoop.java:146) 

Window.java

public class Window { 

    public static boolean NewTerrainCamPos = false; 

    public static String textVal; 
    public static String textVal2; 
    public static String resiveTex = "1"; 
    public static String resiveTex2; 

    public static final int Width = 1000; 
    public static final int Height = 720; 
    public static final int FPS_CAP = 120; 

    private static long lastFrameTime; 
    private static float delta; 

    public static void createDisplay(){ 

     ContextAttribs attribs = new ContextAttribs(3,2).withForwardCompatible(true).withProfileCore(true); 

     try { 
      Canvas openglSurface = new Canvas(); 
       JFrame frame = new JFrame(); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 

       //............................. 
       JMenuBar menuBar = new JMenuBar(); 
       JMenu terrain = new JMenu("Terrain"); 
       menuBar.add(terrain); 
       menuBar.add(terrain); 
       JMenuItem exit = new JMenuItem("Exit"); 
       JMenuItem newTerrain = new JMenuItem("add Terrain"); 
       JMenuItem editTerrain = new JMenuItem("Edit Terrain"); 

       newTerrain.addActionListener(new ActionListener(){ 
        public void actionPerformed(ActionEvent e) { 
         NewTerrainCamPos = true; 
         JFrame frame2 = new JFrame(); 
         frame2.setVisible(true); 
         frame2.setSize(300, 300); 
         //............................... 
         GridLayout experimentLayout = new GridLayout(3,2); 
         frame2.setLayout(experimentLayout); 
         //..................................... 
         JLabel xCord = new JLabel("XCoords: "); 
         JLabel zCord = new JLabel("ZCoords: "); 
         JTextField text = new JTextField(); 
         JTextField text2 = new JTextField(); 

         text.addKeyListener(new KeyListener(){ 

          @Override 
          public void keyTyped(KeyEvent arg0) { 
           resiveTex = text.getText(); 
          } 

          @Override 
          public void keyPressed(KeyEvent e) { 

          } 

          @Override 
          public void keyReleased(KeyEvent e) { 

          } 

         }); 

         resiveTex2 = text2.getText(); 

         JButton createTerrain = new JButton("CreateTerrain"); 

         createTerrain.addActionListener(new ActionListener(){ 
          TIDF terrainFileID; 
          public void actionPerformed(ActionEvent a){ 
           NewTerrainCamPos = false; 
           textVal = text.getText(); 
           textVal2 = text2.getText(); 
           TIDF.terrainIDFile(); 
          } 
         }); 

         frame2.add(xCord); 
         frame2.add(text); 
         frame2.add(zCord); 
         frame2.add(text2); 
         frame2.add(createTerrain); 
        } 
       }); 

       editTerrain.addActionListener(new ActionListener(){ 
        public void actionPerformed(ActionEvent e) { 
         JFrame frame3 = new JFrame(); 
         frame3.setVisible(true); 
         frame3.setSize(300, 300); 
         //...................................... 
         GridLayout experimentLayout = new GridLayout(3,2); 
         frame3.setLayout(experimentLayout); 
         //...................................... 
         JButton select = new JButton("Select"); 
         String terrainLocList[] = 
          { 
           "Item 1", 
           "Item 2", 
           "Item 3", 
           "Item 4" 
          }; 

         JList list = new JList(terrainLocList); 
         list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); 
         list.setVisibleRowCount(-1); 
         frame3.add(list); 
         frame3.add(select); 
        } 
       }); 

       terrain.add(newTerrain); 
       terrain.add(editTerrain); 
       terrain.add(exit); 
       frame.setJMenuBar(menuBar); 
       //......................................... 

       frame.setSize(1100, 1000); 
       frame.add(openglSurface); 
       frame.setVisible(true); 
       openglSurface.setSize(1000, 720); 
       Display.setParent(openglSurface); 

      Display.setDisplayMode(new DisplayMode(Width, Height)); 
      Display.create(new PixelFormat(), attribs); 
      frame.setTitle("Game editor 0.1"); 
     } catch (LWJGLException e) { 
      e.printStackTrace(); 
     } 

     GL11.glViewport(0, 0, Width, Height); 
     lastFrameTime = getCurrentTime(); 
    } 

    public static boolean Returnboolean(){ 
     return NewTerrainCamPos; 
    } 

    public static String getTex1() { 
     return textVal; 
    } 

    public static String getTex2(){ 
     return textVal2; 
    } 

    public static String getTexupdate(){ 
     return resiveTex; 
    } 

    public static String getTexupdate2(){ 
     return resiveTex2; 
    } 

    public static void updateDisplay(){ 
     Display.sync(FPS_CAP); 
     Display.update(); 
     long currentFrameTime = getCurrentTime(); 
     delta = (currentFrameTime - lastFrameTime)/1000f; 
     lastFrameTime = currentFrameTime; 
    } 

    public static float getFrameTimeSeconds(){ 
     return delta; 
    } 

    public static void closeDisplay(){ 
     Display.destroy(); 
    } 

    private static long getCurrentTime(){ 
     return Sys.getTime()*1000/Sys.getTimerResolution(); 
    } 

} 

public class Camera { 

    private static final float TERRAIN_HEIGHT = 0; 
    private boolean FPS = false; 
    private boolean isInAir = false; 

    private float distanceFromPlayer = 40; 
    private float angleAroundPlayer = 0; 

    private Vector3f position = new Vector3f(0,0,0); 
    private float pitch = 20; 
    private float yaw; 
    private float roll; 

    private static final float RUN_SPEED = 20; 
    private static final float GRAVITY = -50; 
    private static final float JUMP_POWER = 30; 
    private float upwardsSpeed = 0; 

    private Player player; 

    public Camera(Player player){ 
     this.player = player; 
    } 

    public void TerLocToFloat(){ 
     String numberAsString = Window.getTexupdate(); 
     int number = Integer.parseInt(numberAsString); 
     position.x = number; 
     position.z = 0; 
    } 

    public void move(){ 
     if(Window.Returnboolean() == true){ 
      AddTerrainCamPos(); 
      TerLocToFloat(); 
     } else{ 
      viewState(); 
     } 
    }  
} 
+2

Einstellung Wenn etwa eine Ausnahme oder Fehler zu fragen, immer die volle Ausnahme oder Fehlermeldung schreiben und zeigen an, welche Zeile (n) beteiligt sind. Bitte helfen Sie uns, Ihnen zu helfen. –

+0

Sicher krank hinzufügen, vergaß durch Zufall Danke, dass Sie mich wissen lassen – furProgrammer

+2

Viele Probleme mit diesem Code, den ich aus der Fledermaus mit einem KeyListener auf einem JTextField sehen kann, etwas, was Sie nie tun sollten. Bitte erkläre mehr darüber, was genau dieser Code versucht, damit wir eine gute Hilfe geben können. –

Antwort

0

Linie 39 in Camera.java

String numberAsString = Window.getTexupdate(); 
int number = Integer.parseInt(numberAsString); 

Wo numberAsString leere Zeichenfolge ist, dass die NFA verursacht

Versuchen Sie das folgende Verfahren unter Verwendung der ganzen Zahl analysieren von default auf 0

public static int parseInteger(String string, int defaultValue) { 
    try { 
    return Integer.parseInt(string); 
    } 
    catch (NumberFormatException e) { 
    return defaultValue; 
    } 
} 
Verwandte Themen