Visual Studio также имеет функцию, которая генерирует Свойство от частной переменной.
, Если Вы щелкаете правой кнопкой по переменной в контекстном меню, которое открывается, нажимают на "Осуществлять рефакторинг" объект. Тогда выберите, инкапсулируют поле. Это создаст свойство метода get/метода set для переменной.
я не слишком крупный поклонник этой техники, поскольку это немного неудобно использовать, если необходимо создать много методов get/методов set, и это помещает свойство непосредственно ниже частного поля, которое прослушивает меня, потому что у меня обычно есть все мои частные поля, группировавшиеся, и эта функция Visual Studio повреждает форматирование моего класса.
Иногда я обнаруживал, что проблема заключается не в том, как Java загружает собственные библиотеки, а в сторонней библиотеке, которой нужен этот собственный код.
Проблема в том, что сторонние библиотеки будут работать в какой-то момент (обычно на очень ранней стадии инициализации)
System.loadLibrary("native.dll");
И если native.dll находится не в подходящем месте, он выдает ошибку.
Если у вас есть доступ к исходный код java сторонней библиотеки, может быть легко исправить этот код, и вы можете легко извлечь свою dll из JAR и запустить System.load перед использованием сторонней библиотеки.
Обновление Я заглянул в источники JNotify. Это именно то, что я сказал:
public class JNotify_win32
{
static
{
System.loadLibrary("jnotify"); /* *** */
int res = nativeInit();
if (res != 0)
{
throw new RuntimeException("Error initialiing native library. (#" + res + ")");
}
}
Выньте строку *** или окружите try-catch, загрузите с помощью System.load (), и все готово.
Я не думаю, что исполняемый файл Java поддерживает Bundle-NativeCode
. Я почти уверен, что это атрибут OSGi . Список поддерживаемых атрибутов определен в Спецификации файла JAR .
За пределами структур, которые его предоставляют, нет встроенной поддержки для объединения собственных библиотек в файлы JAR. Если я правильно помню, можно извлечь файл во временное место и загрузить его вручную.
Я столкнулся с этой проблемой при попытке перехватить событие завершения работы Windows, когда программа работает в этой ОС. Решение, которое я в итоге использовал, было, по сути, решением Макдауэлла: добавление библиотеки DLL в файл jar и извлечение ее во временное место при запуске программы. Если он подходит для вашей программы, вы можете оставить DLL на более постоянном месте, а затем ссылаться на нее при последующих запусках программы. Мое приложение использовалось в среде, где пользователи могли намеренно удалять файлы, которые им не следовало делать, поэтому мне приходилось извлекать DLL при каждом запуске. Однако это не привело к значительному снижению производительности.