WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Апплет и приложение

Апплет и приложение


Дата публикации: 17-03-2013

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

Для начала давайте разберемся в некоторых простых отличиях между апплетом и приложением:

1. Апплет. Апплет обычно не имеет конструктора. Это потому, что апплет не гарантирован в наличии полной среды, до того, как будет вызван метод inti(). Отсюда большинство его инициализаций заканчиваются в методе init().
Приложение. Приложение может иметь конструктор и часто используется один из них для целей инициализации.

2. Апплет. Апплет загружается через сеть и имеет некоторые ограничения по безопасности, такие как невозможность чтения или записи файлов на клиентской машине, загрузка нативных библиотек и т.д. Эти ограничения налагаются SecurityManager-ером, который, устанавливается при запуске JVM браузера. Любая попытка нарушения этих правил вызывает SecurityException.
Приложение. Приложение не имеет каких либо ограничений, поскольку по умолчанию приложение не имеет SecurityManager.

3. Апплет. Как только апплет запускается в среде он имеет некоторые преимущества. Например, апплет запущенный в web браузере может с легкостью отображать HTML документы. Апплет так же предоставляет область отображения в окне родительского приложения, типа браузера.
Приложение. Приложение не имеет таких преимуществ и должен заботится о них самостоятельно.

Эти различия должны быть сохранены в памяти, пока пишется программа, способная выполнятся и как приложение и как апплет. Апплет так же имеет цикл жизни и каждая фаза этой жизни имеет соответствующий метод. Например, метод init() представляет фазу инициализации. Автор апплета обычно переопределяет методы жизненного цикла. Например, вы можете переопределить методы start(), stop() для обработки запуска и остановки апплета. Нижеследующий кусочек кода демонстрирует один из путей написания программы, которая может быть запущена и как приложение и как апплет.



import java.awt.*;
import java.awt.event.*;

/** Demonstrates a program, which can run as an applet as well
as an application. */
public class AppletAppDemo extends java.applet.Applet {

/** Flag to indicate whether the program is running as an application
or applet (true means application). */
protected boolean appFlag = false;
/** A text field to take the user inputs. */
private TextField input;
/** The list to show the user inputs. */
private List list;
/** The status field. */
private Label status;

/** Initialize. */
public void init() {

// Set the layout
setLayout(new BorderLayout());

// Status message
String msg = "Running as an applet.";
if (appFlag == true) {
msg = "Running as an application.";
}

// The UI components
Label inputLbl = new Label("Enter text: ", Label.LEFT);
input = new TextField(10);
list = new List();
Button addButn = new Button("Add");
Button remButn = new Button("Remove");
status = new Label(msg, Label.CENTER);

// Add listeners
addButn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
list.addItem(input.getText());
}
});
remButn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
// Remove only if an item is selected
int index = list.getSelectedIndex();
if (index >= 0) {
list.remove(index);
}
}
});

// Panel to hold the input related components
Panel inputPanel = new Panel(new FlowLayout());
inputPanel.add(inputLbl);
inputPanel.add(input);

// Panel to hold the buttons
Panel butnPanel = new Panel(new FlowLayout());
butnPanel.add(addButn);
butnPanel.add(remButn);

// Panel to hold the buttons panel and the status field
Panel bottomPanel = new Panel(new BorderLayout());
bottomPanel.add(butnPanel, BorderLayout.NORTH);
bottomPanel.add(status, BorderLayout.SOUTH);

// Add components
add(inputPanel, BorderLayout.NORTH);
add(list, BorderLayout.CENTER);
add(bottomPanel, BorderLayout.SOUTH);

}

/** Main. */
public static void main(String[] args) {
AppletAppDemo aad = new AppletAppDemo();
// Indicate that the program is running as an application
aad.appFlag = true;
// Initialize
aad.init();
// Show the UI in a frame
Frame frame = new Frame("Applet/Application Demo");
frame.add(aad, BorderLayout.CENTER);
frame.pack();
frame.setVisible(true);
}

}

Ниже код HTML для апплета:



Applet/Application Demo






Эта простая программа показывает простой пользовательский интерфейс. Она имеет текстовое поле, позволяющее пользователю осуществлять ввод. Когда пользователь вводит текст и нажимает на кнопку "Add", введенный текст добавляется в список в центр. Пользователь может выбрать отдельный элемент в списке и нажать на кнопку "Remove" для удаления оного из списка.

Эта программа использует некоторые интересные вещи. Она имеет класс AppletAppDemo, который и является апплетом. Он имеет логический флаг appFlag для индикации когда программа загружена как апплет, а когда как приложение. По умолчанию он установлен в положение ложь, что означает, что режим по умолчанию - режим апплета. Другой интересной вещью является отсутствие конструктора. Вся инициализация заканчивается в методе init(). он инициализирует и устанавливает пользовательский интерфейс. Заметьте, что значение флага appFlag используется для отображения посредством сообщения, в каком режиме запущенна программа. Анонимные классы здесь используются для обработки событий.

Давайте пройдемся сначала по режиму приложения. В этом режиме метод будет выполнен main(). Он создает экземпляр класса AppletAppDemo. Затем он устанавливает флаг appFlag для отображения режима запуска программы и вызывает init(). Создается окно для отображения пользовательского интерфейса. Апплет добавляется в центр этого окна. Это возможно, поскольку апплет является потомком component (java.awt.Component). В заключении формируется и показывается окно.

В режиме апплета, как вы можете догадаться, программа запускается по другому, без вызова main(). В этом случае сначала вызывается init(). Сообщение о режиме в таком случае покажет то, что это апплет, поскольку флаг appFlag установлен в положение ложь.

Использование членов программы, типа appFlag, может быть расширено кусочками кода так, что сможет обрабатывать SecurityException (помните, что мы говорили о различиях между апплетом и приложением). Или если вы предпочитаете пропускать это исключение.
Домен продается

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Апрель 2024 (1)
Октябрь 2018 (14)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41

Друзья сайта



Случайная цитата

Неизвестный автор:

"Плохой анкор, вебмастеру укор."

Опрос

Как Вам новый дизайн сайта?

Отлично
Неплохо
Нормальный
Ужасно