2015-04-07 45 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);