Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFileChooser无限循环_Java_Loops_Libgdx_Infinite Loop_Jfilechooser - Fatal编程技术网

Java JFileChooser无限循环

Java JFileChooser无限循环,java,loops,libgdx,infinite-loop,jfilechooser,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 SaveDialo

当我关闭我的
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();
        }
    }
}

有人能帮我解决这个问题吗。

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

如果(!SaveDialog.open),则
的上下文是什么?如果是在一个无休止的循环中,你按住s可能就是问题所在。尝试输入
System.out.println(“按键”)就在您的
if(input.isKeyPressed(input.Keys.S))
下面。如果它在控制台中重复出现,这就是您的问题。1)查看何时调用“保存”对话框会有所帮助。2)而不是静态<代码> JFileChooser < /代码>,考虑创建一个单独的实例<代码> SaveDialog < /C> >或者甚至<代码> JFileChooser < /C>。3)代替使用<代码>(如果)(<)>代码>,考虑使用