2015-04-07 43 views
1

问题:我有一个GDX桌面应用程序,我想在JFrame内部运行,这样我就可以产生其他的JFrames parented到它,这样当我关闭主其他窗口的游戏也将关闭。LibGDX - 在JFrame中的Lwjgl画布不能在跨平台工作

尝试的解决方案:我在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(); 
    } 
} 

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

回答

0

我没有窗户,但是这对我的作品在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);