A NullReferenceException
бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.
Например:
string str = string.Empty;
str.ToLower(); // throw null reference exception
Public Class Person {
public string Name { get; set; }
}
Person objPerson;
objPerson.Name /// throw Null refernce Exception
Вы можете извлечь все JAR и объединить их в один общий JAR. Есть задачи ANT и плагины Maven, доступные для этого. Кроме того, если приложение правильно написано, нет ничего, что помешало бы вам помещать медиа-файлы и другие ресурсы в JAR. Вам просто нужно убедиться, что эти ресурсы « загружены из пути к классам », а не загружаются из текущего рабочего каталога.
имеют проект java, который состоит из нескольких различных типов файлов (изображений, звука и т. д.) и нескольких зависимостей jar, что является хорошим способом упаковать все это в одну банку, которую можно просто дважды щелкнуть
blockquote>Лучший способ развертывания богатого клиентского приложения. использует Java Web Start . Конечный пользователь никогда не увидит Jar, и ему может быть предоставлен рабочий стол или пункт меню для запуска приложения.
Если вы используете Maven, вы можете оценить onejar-maven-plugin . Одно из основных преимуществ заключается в том, что все ваши банки-иждивенцы остаются в баночках, а ваш код находится в собственной банке. Все эти банки помещаются в большую банку, которая становится исполняемой, что позволяет избежать некоторых возможных проблем с классом. Прочтите руководство по использованию и это сообщение в блоге для получения дополнительной информации.
Apache Maven плюс плагин shade будет делать именно то, что вам нужно.
Проверьте «Shade Plugin», где добавлен Main-Class раздел MANIFEST.MF "здесь http://maven.apache.org/plugins/maven-shade-plugin/examples.html
Если вы используете плагин сборки для maven, вы можете загрузить его зависимостями, построить модули и создать исполняемый банку.
Если вы создаете исполняемую банку и имеете другие банки, которые должны быть доступны в пути к классам, в файле MANIFEST.MF в банке есть строка Class-Path: список записей (включая банки и каталоги) для включения в пути к классам при запуске основного класса.
Обычно я использую мою среду IDE или ant для создания таких исполняемых банок и устанавливаю заголовок Class-Path:
. Кстати, к сделайте исполняемый файл jar, установите строку Main-Class: в файле MANIFEST.MF.
Вот пример из исполняемого jar, который я создаю:
Main-Class: com.example.app.MyAppCLI
Class-Path: log4j.jar driver.jar libraries.jar
И вот соответствующая цель муравья, чтобы построить это:
<target name="exejar">
<jar destfile="myapp.jar"
basedir="bin"
include="**/app/*.class">
<manifest>
<attribute name="Main-Class" value="com.example.app.MyAppCLI"/>
<attribute name="Class-Path" value="log4j.jar driver.jar libraries.jar"/>
</manifest>
</jar>
</target>
Если вы будете использовать инструмент, подобный муравьям, для создания исполняемых банок, это сделает процесс более простым для повторения и также будет обрабатывать странные случаи края для вы, как то, что происходит, когда строка заголовка в MANIFEST.MF становится слишком длинной.