我正在尝试将我的游戏提取到一个可运行的.jar文件中,以便我在朋友之间进行第一次alpha测试。但是,当我导出时,我得到一个只打开一个空白框架的应用程序。使用Eclipse中的Run可以正常工作。
这是我的静态主要内容:
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类(在我的清单中选择)不是一个可运行的线程,我尝试将一切简化为简单的显示。我知道游戏功能本身并没有运行,因为它永远不会到达我指定内存附近的任何地方。
我的opengl libs被提取到jar中。 Main类位于进程包中(它也不能使用默认包)。
而且,就像我说的那样,它是从一个清单中运行的,它将Main指定为主类(静态主体所在的)。
我已经对它做了很多修改,并且我已将其缩小到所有对Display类的调用,即使它们在Eclipse中运行也能正常工作。 (使用System.exit(0);在函数调用之后,如果它冻结,则删除它们。)
添加:我还发现在提取的jar内部的lwjgl包中,Display类被拆分为8个单独的文件。但是,我正在导入opengl。*。
答案 0 :(得分:0)
我没有在罐子里包装当地人。
答案 1 :(得分: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()
来查看嵌套异常。