Spec-Zone .ru
спецификации, руководства, описания, API
Содержание документации

Лучшие Методы Для Разработки Апплета

Руководство разработчика апплета > Плагин Java и Архитектура Апплета> Лучшие Методы Для Разработки Апплета

Содержание


Введение

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

Избегите Статического государства

Значения, сохраненные в апплете, могли сохраниться между вызовами, если память, полученная кэшем загрузчика класса, не необходима в других целях. Но невозможно зависеть от того поведения. Вообще, апплеты должны быть не сохраняющими состояние. Если персистентное хранение необходимо, используйте cookie браузера.

Возвратитесь из start метод как можно быстрее

Если start не завершается, stop не может быть вызван. Это важно, потому что сборка "мусора" происходит после destroy метод завершается. Если апплет задерживается в start метод, тогда апплет не может быть разъединен должным образом. (Это будет разъединено, и сборка "мусора" произойдет, но средства, полученные во время инициализации апплета, не могут быть должным образом высвобождены.)

Для в вычислительном отношении интенсивного приложения как демонстрационный пример Часов прием должен реализовать Runnable соедините интерфейсом, прикончите тяжелый подъем run метод это требует, и запустите отдельный поток, чтобы сделать фактическую работу, как показано в этом кратком обзоре из исходного кода:

public class Clock extends Applet implements Runnable { 
  private volatile Thread timer;    // The thread that displays the clock
  ... 
  public void start() {
    timer = new Thread(this);       // Create the thread and start it
    timer.start();
  }
   
  public void stop() {
    timer = null;                   // Release the thread resource
  }

  public void run() {
    Thread me = Thread.currentThread();
    while (timer == me) {
      try {
        Thread.currentThread().sleep(100);
      } 
      catch (InterruptedException e) { 
      }
      repaint();
    }
  } 
  ...

Здесь, действие должно приостановить экземпляр Часов, который это выполняет в новом потоке (следовательно потребность сохранить указатель на это.) Апплеты, которые не должны сделать всего, что может просто поместить их код обработки в run метод.

Для интерактивного приложения как демонстрационный пример электронной таблицы легко достигается та цель, так как большинство времени тратится в потоке обработки событий, как показано в этом кратком обзоре из исходного кода:

public class SpreadSheet extends Applet
  implements MouseListener, KeyListener  // Event processing
{
  public void init() {
    ...
    addMouseListener(this);
    addKeyListener(this);
  } 
  ...
  public void start() {
        isStopped = false;
  }

  public void stop() {
         isStopped = true;
  }

  public void keyTyped(KeyEvent e) {    // Invoked when an event occurs
    ...
  }
  public void mousePressed(MouseEvent e) {
    ...
  }
  
  ...
class CellUpdater extends Thread {
  ... 
  public void run() {
    ...
      if (!target.app.isStopped && !target.paused) {
                        target.app.repaint();
      }

В этой определенной реализации у каждой ячейки есть свой собственный поток обновления. Обновление приостанавливается, когда ячейка выбирается, и только останавливается полностью, когда апплет завершается. Важный момент то, что апплет start и методы stop только отслеживают состояние апплета. Большая часть времени проводится в базовом потоке обработки событий, ожидающем нажатия клавиши пользователя или щелчка мышью. Реальная работа апплета тогда происходит в ответ на одно из тех событий.

Обеспечьте ID для Апплета

ID определяет пространство имен, и гарантирует надлежащее именование на всех уровнях иерархии данных:

<applet 
  id="myApplet" 
  name="myApplet"
  ...

Отключите Кэш Classloader

Апплеты действительно не сохраняющие состояние не зависят от значений, ранее сохраненных в статических переменных. Так как невозможно зависеть от тех значений, которые будут сохранены, это - хорошая идея создать апплеты не сохраняющие состояние. Но пользователь может все еще сохранить состояние. Это только, которые хранят данные, где это принадлежит - с пользователем, а не в коде апплета.

Чтобы реализовать приложение не сохраняющее состояние, cookie браузера доступа или запуск с JNLP, чтобы использовать Java веб-сдобы Запуска, таким образом, апплет добирается, это - начальные установки от персистентного хранения, вместо того, чтобы использовать значения, сохраненные в программе.

Чтобы гарантировать, что Ваш апплет является не сохраняющим состояние, используйте атрибут classloader_cache, чтобы отключить кэш. Например:

<applet
  ... 
  classloader_cache="false" 

Та установка гарантирует, что апплет является не сохраняющим состояние, и что это действительно разъединяется от остатка от системы и от других экземпляров апплета. Это также гарантирует, что апплет выполняет тот же самый путь каждый раз, так как на это не будет влиять состояние, которое было непреднамеренно сохранено.

Отметьте:
В редком случае, что Вы ожидаете, что Ваши пользователи неоднократно запустят повторно тот же самый апплет, Вы могли бы считать отъезд кэша включенным для производства ради производительности, но отключить его во время разработки, чтобы гарантировать качество.

Установите Прокси, чтобы Управлять GUI Апплета от JavaScript

Чтобы предотвратить конкуренцию потока, не обновляйте Swing или GUI AWT от javascript непосредственно. Вместо этого установите прокси, который передает запрос к соответствующему, диспетчеризируют поток:

Сохраните Межпроцессные Вызовы Короткими

Минимизируйте время, потраченное, чтобы вызвать от Java в javascript, и от javascript в Java. Не делайте продолжительной работы в таких вызовах, или Вы рискуете мертвой блокировкой. Сохранить вызовы короткими:

  1. В методе Java, который вызывается от javascript, запустите отдельный поток, чтобы сделать работу.
  2. Если у функции javascript есть много, чтобы сделать, переместитесь, код к Java обрабатывают и делают работу в отдельном потоке, чтобы разгрузить работу от браузера.

Избегите Межпроцессных Вызовов Туда и обратно

Вызывая в Java, не превращайте, перезванивает в javascript, если можно возможно помочь этому, и наоборот. В том исходном плагине, делая столь имел обыкновение запирать браузер. Это не должно произойти больше, но вызовы туда и обратно действительно представляют существенные задержки во время обработки.

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

Используйте в своих интересах Многопоточность Java

У платформы Java есть мощные возможности многопоточности, которые можно использовать в своих интересах с классами как Поток, Swing invokeLater, и AWT invokeLater, так же как новый класс ThreadPoolExecutor, который поддерживает пул фонового потока.




Oracle и/или его филиалы Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.
Свяжитесь с Нами