2012-06-19 71 views
0

當我關閉我的JFileChooser對話框時,它會再次打開。我正在使用libgdx更新來檢查輸入。Java JFileChooser無限循環

這裏是輸入碼...

if(!SaveDialog.open) { 
    if(input.isKeyPressed(Input.Keys.S)) { 
     SaveDialog.Save(pixmap); 
    } 
} 

如果我按S很快,對話框打開只有一次,但如果我按下它像2秒,就會有無窮的(我認爲)JFileChooser對話數。

這是我的代碼...

public class SaveDialog { 
    private static boolean inited = false; 
    private static JFileChooser fc; 
    public static boolean open = false; 

    public static void Init() { 
     fc = new JFileChooser(); 

     fc.setFileFilter(new FileFilter() { 
      public String getDescription() { 
       return ".png"; 
      } 
      public boolean accept(File f) { 
       return f.getName().endsWith(".png"); 
      } 
     }); 

     inited = true; 
    } 

    public static void Save(Pixmap pixmap) { 
     open = true; 

     if(!inited) { 
      Init(); 
     } 

     fc.showSaveDialog(null); 

     byte[] data; 
     try { 
      data = PNG.toPNG(pixmap); 
      FileHandle fh = new FileHandle(fc.getSelectedFile() + ".png"); 
      fh.writeBytes(data, false); 
      open = false; 
     } 
     catch (IOException e) { 
      open = false; 
      e.printStackTrace(); 
     } 
    } 
} 

可能有人請幫我解決這個問題。

+0

什麼是'如果(SaveDialog.open!)'語境?如果它處於一個無限循環中,則可能是問題所在。嘗試在你的'if(input.isKeyPressed(Input.Keys.S))'下面放置'System.out.println(「Key pressed」);''。如果它在控制檯中反覆出現,那就是你的問題。 – purtip31

+0

1)這將有助於查看何時調用保存對話框。 2)不要使用靜態的'JFileChooser',而應考慮創建'SaveDialog'或者甚至'JFileChooser'的單個實例。 3)不要執行'if(!inited)',請考慮使用[靜態初始化塊](http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html) – user845279

回答

1

它不幫助isKeyPressed(Input.Keys.S)確定是否S鍵是當前按住。

如果在第二次調用isKeyPressed()之前,您還沒有給過libgdx一次輪詢輸入的機會,那麼我懷疑它仍然會認爲它被按下。

如果這不是問題,請嘗試記錄鍵的狀態,並且只有在狀態從未按下狀態變爲按下時纔打開對話框。

例如:

if(!SaveDialog.open) { 
    boolean isSPressed = input.isKeyPressed(Input.Keys.S); 
    if(!wasSpressed && isSPressed) { 
     SaveDialog.Save(pixmap); 
    } 
    wasSPressed = isSPressed; 
} 
+0

感謝它的工作。奇怪,因爲我已經試過這個。 = d – user1467401