#java #eclipse #lwjgl
#java #eclipse #lwjgl
Вопрос:
Я пытаюсь извлечь свою игру в runnable .jar-файл для моего первого альфа-теста среди друзей. Однако, когда я экспортирую, я получаю приложение, которое просто открывает пустой фрейм. Он отлично работает при запуске в 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();
}
И прежде чем вы спросите, я попытался сделать основной класс (который выбран в моем манифесте) не выполняемым потоком, и я попытался свести все к простому отображению. Я знаю, что сами игровые функции не запущены, потому что они никогда не доходят до моей назначенной памяти.
Мои библиотеки opengl извлекаются в jar. Основной класс находится в пакете processes (он также не работал с пакетом по умолчанию).
И, как я уже сказал, он запускается из манифеста, который назначает Main в качестве основного класса (в котором находится статический main).
Я немного повозился с ним и сузил его до всех вызовов класса отображения, хотя они отлично работают при запуске в Eclipse. (используется System.exit(0); после вызовов функций удаляйте их, если они зависли.)
Добавить: я также обнаружил, что в пакете lwjgl внутри извлеченного jar класс отображения разделен на 8 отдельных файлов. Тем не менее, я импортирую opengl.*.
Комментарии:
1. Возможно, генерируется исключение… Попробуйте окружить свой
main()
кодtry/catch (Exception e)
.
Ответ №1:
Я не упаковывал туземцев в jar.
Ответ №2:
В вашем коде есть скрытая ошибка: если main()
генерируется исключение (и, вероятно, оно возникло, когда не удалось загрузить собственные библиотеки), вы его не увидите. Попробуйте вместо этого этот шаблон:
public void main( String[] args ) {
try {
MainClass tool = new MainClass();
tool.run( args );
} catch( Exception e ) {
e.printStackTrace();
}
}
и переместите ваш main()
код в новый частный метод run()
Если у вас есть commons-lang
в вашем classpath, используйте ExceptionUtils.printRootCauseStackTrace()
вместо этого, чтобы также видеть вложенные исключения.