0

我正在尝试将我的游戏提取到一个可运行的 .jar 文件中,以便在朋友中进行第一次 alpha 测试。但是,当我导出时,我得到一个只打开一个空白框架的应用程序。使用 Eclipse 中的运行可以正常工作。

这是我的静态主要内容:

   public static void main(String[] args){
regular=new DisplayMode(800,600);
mainframe=new JFrame();
mainframe.setSize(new Dimension (regular.getWidth(), regular.getHeight()));
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
mainframe.setLocation(dim.width/2-(regular.getWidth()/2), dim.height/2-(regular.getHeight()/2));
 ExecutorService exmain = Executors.newFixedThreadPool(1);
 displaycanvas=new Canvas();
       displaycanvas.setSize(regular.getWidth(), regular.getHeight());
       mainframe.add(displaycanvas);
        displaycanvas.setFocusable(true);
        displaycanvas.requestFocus();
        displaycanvas.setIgnoreRepaint(true);
        mainframe.setVisible(true);
        mainframe.setResizable(true);
Main datmain=new Main(displaycanvas, mainframe);
mainframe.addWindowListener(datmain.new maincloser(datmain));
mainframe.addComponentListener(datmain.new mainresize(datmain));
Thread mainthread= new Thread(datmain);
mainthread.run();
}

在你问之前,我确实尝试过使 Main 类(在我的清单中选择)不是一个可运行的线程,并且我确实尝试将所有内容简化为一个简单的 Display。我知道游戏功能本身没有运行,因为它永远不会到达我分配的内存附近的任何地方。

我的 opengl 库被提取到 jar 中。Main 类在 processes 包中(它也不适用于默认包)。

而且,就像我说的,它是从一个清单中运行的,该清单将 Main 指定为主类(静态 main 所在的类)。

我已经对其进行了相当多的修改,并将其范围缩小到对 Display 类的所有调用,即使它们在 Run in Eclipse 中运行良好。(使用 System.exit(0); 函数调用后,如果冻结,则将其删除。)

补充:我还发现在解压jar里面的lwjgl包里面,Display类被分成了8个独立的文件。但是,我正在导入 opengl.*。

4

2 回答 2

0

我没有把本地人包装在罐子里。

于 2011-10-25T14:19:33.797 回答
0

您的代码中有一个隐藏的错误:如果main()抛出异常(它可能在无法加载本机库时发生),那么您将看不到它。试试这个模式:

public void main( String[] args ) {
    try {
        MainClass tool = new MainClass();
        tool.run( args );
    } catch( Exception e ) {
        e.printStackTrace();
    }
}

并将您的main()代码移动到新的私有方法中run()

如果你commons-lang在你的类路径中,也可以使用它ExceptionUtils.printRootCauseStackTrace()来查看嵌套异常。

于 2011-10-25T14:57:50.410 回答