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

Markus поднял большой вопрос. Я решил искать эти autocomplete атрибут и получил следующее:

единственный недостаток к использованию этого атрибута - то, что это не стандартно (это работает в IE и браузерах Mozilla), и заставил бы проверку XHTML перестать работать. Я думаю, что это - случай, где разумно повредить проверку как бы то ни было. ( источник )

, Таким образом, я должен был бы сказать, что, хотя он не работает 100% через плату, он обрабатывается в главных браузерах, таким образом, это - отличное решение.

13
задан Brian 15 July 2009 в 18:26
поделиться

4 ответа

РЕДАКТИРОВАТЬ: совершенно новый ответ

Хорошо, я полностью переосмыслил вопрос и считаю, что получаю то, что вы хотите. На самом деле я делал это раньше :-P.

Идея в том, что у меня есть базовый класс, который перегружает operator (), а затем у меня есть подкласс для каждой «арности» функций. Наконец, у меня есть фабричная функция, которая вернет одну из этих вещей. Код большой (и, вероятно, немного избыточный), но работает хорошо. Большая часть перегрузок library_function предназначена для поддержки различных синтаксисов, в основном ненужных. Он также поддерживает функции boost :: bind , функции-члены и т. Д., Намного больше, чем вам, вероятно, нужно.

http://pastebin.com/m35af190

Пример использования:

// map of library functions which will return an int.
std::map<std::string, LibraryFunction<int> > functions;

// function to register stuff in the map
void registerFunction(const std::string &name, LibraryFunction<int> func) {
    functions.insert(std::make_pair(name, func));
}

позже вы можете сделать это: аргумент libname. Манера в имя библиотеки сопоставляется с актуальная системная библиотека - это система зависимый.

Вызов System.loadLibrary (name) эквивалентно вызову

  Runtime.getRuntime (). loadLibrary (name)

Runtime.loadLibrary :

Загружает динамическую библиотеку с указанное имя библиотеки. Файл содержащий собственный код загружается из локальная файловая система с места где файлы библиотеки обычно получено. Детали этого процесса зависят от реализации. В отображение имени библиотеки на конкретное имя файла делается в специфичный для системы способ.

Во-первых, если есть менеджер безопасности, его метод checkLink вызывается с имя библиотеки в качестве аргумента. Это может приведет к исключению безопасности.

Метод System.loadLibrary (String) это обычный и удобный means of invoking this method. If native methods are to be used in the implementation of a class, a standard strategy is to put the native code in a library file (call it LibFile) and then to put a static initializer:

 static { System.loadLibrary("LibFile"); }

within the class declaration. When the class is loaded and initialized, the necessary native code implementation for the native methods will then be loaded as well.

If this method is called more than once with the same library name, the second and subsequent calls are ignored.

32
ответ дан 1 December 2019 в 19:41
поделиться

I'm pretty sure any subsequent calls to load an already loaded library have no effect [citation needed].

This was verified in the ClassLoader class source code, but I'm still trying to find a good source for this.

0
ответ дан 1 December 2019 в 19:41
поделиться

Из JavaDocs -

Если этот метод вызывается более одного раза с одним и тем же именем библиотеки, второй и последующие вызовы игнорируются.

2
ответ дан 1 December 2019 в 19:41
поделиться

Создайте одноэлементный класс, который загружает "jni" только во время первого экземпляра, и вызовите этот одноэлементный объект в class1 и class2 вместо System.loadLibrary ("jni")

0
ответ дан 1 December 2019 в 19:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: