Невозможно извлечь проект в виде выполняемого Jar

#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() вместо этого, чтобы также видеть вложенные исключения.