Как я могу определить в который контекст Апплета Java, работающий, не передавая идентификатор?

Причины, почему селекторы на основе id не работают

  1. Элемент / DOM с указанным идентификатором еще не существует.
  2. Элемент существует, но он не является зарегистрированный в DOM [в случае, если HTML-узлы динамически добавляются из ответов Ajax].
  3. Присутствует более одного элемента с тем же идентификатором, который вызывает конфликт.

Решения

  1. Попробуйте получить доступ к элементу после его объявления или, альтернативно, использовать такие вещи, как $(document).ready();
  2. . Для элементов, исходящих из ответов Ajax, используйте метод .bind() для jQuery. В старых версиях jQuery для этого было .live().
  3. Используйте инструменты [например, плагин webdeveloper для браузеров], чтобы найти дубликаты идентификаторов и удалить их.
6
задан brainless 11 March 2016 в 17:58
поделиться

3 ответа

Одиночные элементы являются злыми, что Вы ожидаете?;)

Возможно, наиболее комплексный подход должен был бы загрузиться, объем апплета в другом загрузчике класса (используйте java.net. URLClassLoader.newInstance). Затем используйте WeakHashMap для соединения загрузчика класса с апплетом. Если Вы могли бы разделить большую часть кода на общий загрузчик класса (как родитель каждого загрузчика на класс апплета) и в нормальную кодовую базу апплета, которая будет быстрее, но больше работы.

Другие взломы:

Если у Вас есть доступ к какому-либо компоненту, можно неоднократно использовать Component.getParent или SwingUtilities.getRoot.

Если Вы находитесь в потоке экземпляра на апплет, то можно создать ThreadLocal.

От EDT можно считать текущее событие из очереди (java.awt. EventQueue.getCurrentEvent ()), и возможно находят компонент от этого. Кроме того, продвиньте EventQueue с переопределенным dispatchEvent методом.

3
ответ дан 17 December 2019 в 18:21
поделиться

Если я понимаю Вас правильно, идея состоит в том, чтобы получить другой "одноэлементный" объект для каждого объекта вызывающей стороны или "контекста". Одна вещь, которую можно сделать, состоит в том, чтобы создать локальную для потока глобальную переменную, где Вы пишете идентификатор текущего контекста. (Это может быть сделано с AOP.) Затем в одноэлементном методе считывания, идентификатор контекста выбирается от локального для потока для использования в качестве ключа к корректному "одноэлементному" экземпляру для контекста вызова.

Относительно AOP не должно быть никакой проблемы с помощью него в апплетах, так как, в зависимости от сокращений точки, советы ткут во время компиляции, и JAR добавляется к зависимостям во время выполнения. Следовательно, никакое специальное доказательство AOP не должно оставаться во время выполнения.

0
ответ дан 17 December 2019 в 18:21
поделиться

@Hugo относительно threadlocal:

Я думал о том решении. Однако из экспериментов я нашел две проблемы с тем подходом:

  1. Общий поток (серверные соединения, и т.д.) проблематичны. Это может быть решено, хотя путем обращения особого внимания на них распараллеливают (они все находятся под моим контролем и в значительной степени изолируются от унаследованного кода).
  2. Поток EDT совместно используется через все апплеты. Мне не удалось найти способ вызвать создание нового потока EDT для каждого апплета. Это означает, что threadlocal для EDT был бы совместно использован через апплеты. Этот я понятия не имею, как решить. Предложения?
0
ответ дан 17 December 2019 в 18:21
поделиться
Другие вопросы по тегам:

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