Проблемы с загрузкой ресурсов во время исполнения

Вот фон основной проблемы, я сотрудничаю с группой над проектом, который используетSwt библиотеки, и я пытаюсь упаковать программное обеспечение для развертывания. Как выясняетсяSWT очень зависит от платформы / архитектуры. Я хотел бы иметь возможность упаковать все шестьjars (linux, mac, win и 32/64-bit) в один и тот же пакет и использовать соответствующую библиотеку в зависимости от системы. Я понимаю, что это сложная задача, переходя наSwing (или что-нибудь еще) на самом деле не вариант сейчас.

Я нашел ряд соответствующих тем (@ Нить Аарона Дигуллы а также@ mchr тема), которая дала мне ценную информацию о проблеме под рукой. Я попытался реализовать решение, предложенное @Alexey RomanovВот, С одним отличием, какloadSwtJar() метод, который он предлагает, не является статичным, я создаю экземпляр объекта и сразу после этого запускаю метод, прежде чем что-либо еще будет сделано с объектом.

Похоже, что процедура загрузки не работает должным образом. Мое обоснование этого утверждения заключается в следующем:

Я упалSwt jar удаляются из пути к классам исполняемого файла jar, затемException in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/events/MouseListener брошен который вызван:java.lang.ClassNotFoundException: org.eclipse.swt.events.MouseListener

для меня это означает, что библиотеки не найдены в classpath, я ошибаюсь?

Еслиswt JAR-файлы остаются на пути к классам, а затем первый файл JAR-файла используется системой во время выполнения. Это означает, что если gtk-linux-x86_64 окажется первым jar-файлом swt в списке jar-файлов, то система попытается использовать его независимо от того, установлена ​​ли на нем система win32 или Mac OSX.

Я попытался добавить вывод, чтобы увидеть, еслиloadSwtJar() Метод выбирает правильный jar, и вывод кажется правильным на всех платформах, которые я пробовал, поскольку в правильном пакете выбран (и файлы действительно существуют в работающем jar). Но тем не менее правильная библиотека не загружена, поэтому возникают ошибки выполнения:Exception in thread "main" java.lang.reflect.InvocationTargetException вызвано, например, для:Caused by: java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM (Обратите внимание, что это ошибка, которую я получаю на своем компьютере с Linux, если я изменяю порядок появления 64-битных и 32-битных библиотек SWT наbuild.xml файл)

Итак, в чем здесь проблема? Я упускаю некоторые детали или просто невозможно проверить системные свойства и загрузить соответствующую библиотеку соответственно?

Наконец, ниже приведен отрывок из моего файла сборки, я подумал, что это может помочь найти источник проблемы.

Заранее спасибо,

РЕДАКТИРОВАТЬ: После долгого сеанса отладки с коллегой проблема решена (за исключением досадной ошибки, связанной с управлением потоками в MacOS, как я уже упоминал)Вот). Он включал в себя настройку сборки ANT, а также способ написания основного класса. (Как оказалось, основной класс расширял и реализовывал ссылки из библиотеки SWT, что означало, что код не будет компилироваться вообще, оборачивал основной класс другим классом и загружал оттуда файлы SWT, которых, по-видимому, было достаточно. решить проблему)

Спасибо и привет всем, кто внес свой вклад, особенно @Aaron. Очень ценится!

Ответы на вопрос(2)

Ваш ответ на вопрос