繁体   English   中英

LibGDX-JFrame中的Lwjgl画布无法跨平台工作

[英]LibGDX - Lwjgl canvas in JFrame not working cross-platform

问题:我有一个要在JFrame中运行的GDX桌面应用程序,以便可以生成其他作为其父级的JFrame,这样当我关闭主游戏时,其他窗口也将关闭。

尝试的解决方案:我在JFrame应用程序中运行GDX应用程序,然后获取其画布并将其添加到内容窗格中。

先前的代码,可以很好地工作(跨平台):

public class DesktopLauncher {
    public static void main (String[] arg) {
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        config.width  = 800;  config.height = 600;
        new LwjglApplication(new GDXRoot(), config);
    }
}

基于JFrame的新方法(到目前为止,我只让它在Windows 8上可以使用。在OS X,Windows 7甚至Windows 10技术预览版上都无法使用):

public class EditModeLauncher extends JFrame {
    final LwjglCanvas canvas;
    LwjglApplicationConfiguration config;

    public EditModeLauncher() {
        config = new LwjglApplicationConfiguration();
        config.width  = 800;  config.height = 600;
        config.resizable = false;
        canvas = new LwjglCanvas(new GDXRoot(), config);
        canvas.getCanvas().setSize(800, 600); 
        getContentPane().setPreferredSize(new Dimension(800,600));

        final JFrame test = new TestUI(this);
        test.setLocation(800,300);

        Runtime.getRuntime().addShutdownHook(new Thread() {
            @Override
            public void run() {
                Runtime.getRuntime().halt(0); // because of deadlocks with shut down
            }
        });

        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                getContentPane().add(canvas.getCanvas());
                setVisible(true);
                canvas.getCanvas().requestFocus();
            }
        });
        test.setVisible(true);
    }

    private class TestUI extends JFrame {
        private TestUI(final EditModeLauncher parent) {
            // code omitted ...
        }
    }

    public static void main (String[] arg) {
        new EditModeLauncher();
    }
}

任何想法可能是什么问题?

我没有Windows,但这在Linux Mint上对我有效:

    LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
    config.width = 800;
    config.height = 600;
    ApplicationListener appListener = new MyGdxGame();
    Canvas canvas = new Canvas();
    new LwjglApplication( appListener, config, canvas );

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.add( canvas );
    frame.setSize( config.width, config.height );
    frame.setLocationRelativeTo( null );
    frame.setVisible(true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM