Java JFileChooser无限循环

时间:2012-06-19 19:44:33

标签: java loops libgdx infinite-loop jfilechooser

当我关闭JFileChooser对话框时,它会再次打开。我正在使用libgdx更新来检查输入。

这是输入代码......

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();
        }
    }
}

有人可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

isKeyPressed(Input.Keys.S)确定S键是否当前按下是没有帮助的。

如果你没有给libgdx一次机会在第二次调用isKeyPressed()之前再次轮询输入,那么我怀疑它仍会认为它被按下了。

如果不是问题,请尝试记录键的状态,只有当状态从未按下变为按下时才打开对话框。

例如:

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