1. Апплет с эффектом анимации на основе многопоточности Java и обращением к локальной файловой системе
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Calendar;
public class Draw extends Applet implements AdjustmentListener, ActionListener,
Runnable {
Thread animThread = null; //Поток для рисования анимированного //изображения
Button b1; // кнопка 1
Button b2; // кнопка 2
Button b3; // кнопка 3
Button b4; // кнопка 4
Button st1;
Button st2;
Choice ch; // выпадающий список
Scrollbar sb; // полпоса прокрутки
TextField tf;// текстовое поле
Label lb1; // надпись
Label lb2;
Canvas canvas;// область для рисования
int x = 10;
int y = 60;
int dy = 1; // "шаг" движения изображения
Panel Left;
Panel Right;
Panel Journal; // панель для размещения файла-журнала
int k = 0;
int t = 0;
Color col1, col2, col3, col4, col5, colf1, colf2, colf3;
Button buttj;
TextArea fileText;
// Имя файла-журнала для записи информации о работе апплета
String fileName = "";
// Раделитель строк (признак конца строки)
String ls;
// Буферизированный символьный поток записи в файл
BufferedWriter out;
public void init() {
col1 = new Color(0, 0, 255);
col2 = new Color(0, 150, 0);
col3 = new Color(250, 150, 50);
col4 = new Color(250, 0, 0);
col5 = new Color(0, 0, 0);
colf1 = new Color(255, 150, 255);
colf2 = new Color(100, 200, 255);
colf3 = new Color(255, 255, 150);
setLayout(new GridLayout(1, 3));
Left = new Panel();
Left.setLayout(new GridLayout(2, 1));
Left.setBackground(colf1);
Right = new Panel();
Right.setLayout(new BorderLayout());
Right.setBackground(colf3);
addToPanel();
add(Left);
add(Right);
// Панель для чтения файла-журнала
Journal = new Panel();
Journal.setLayout(new BorderLayout());
fileText = new TextArea();
fileText.setBackground(Color.white);
Journal.add(fileText, BorderLayout.CENTER);
fileName = getParameter("FileName");
if (fileName == null)
fileName = "log.txt";
ls = System.getProperty("line.separator"); // разделитель строк
buttj = new Button("Чтение файла-журнала");
buttj.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
// Сброс данных из буфера потока (запись в файл)
out.flush();
// Чтение из файла
BufferedReader in = new BufferedReader(new FileReader(
fileName));
String s = "", line;
while ((line = in.readLine()) != null)
s += line + "\n";
fileText.setText(s);
in.close();
} catch (IOException ex) {
fileText.setText("Ошибка чтения файла: " + ls);
fileText.append(ex.toString());
}
}
});
Journal.add(buttj, BorderLayout.NORTH);
add(Journal);
try {
out = new BufferedWriter(new FileWriter(fileName));
} catch (IOException ex) {
fileText.setText("Ошибка при создании потока записи: " + ls);
fileText.append(ex.toString() + ls);
} catch (SecurityException ex) {
fileText.setText("Нет разрешения доступа к файлу: " + ls);
fileText.append(ex.toString() + ls);
buttj.setEnabled(false);
}
if (out != null) {
Calendar c = Calendar.getInstance();
String dateMessage = "Дата и время: "
+ c.get(Calendar.DAY_OF_MONTH) + "/"
+ (c.get(Calendar.MONTH) + 1) + " - "
+ c.get(Calendar.YEAR) + " " + c.get(Calendar.HOUR_OF_DAY)
+ ":" + c.get(Calendar.MINUTE);
writeLogMessage(dateMessage);
writeLogMessage("Инициализация апплета завершена");
}
}
// -----------------Блок прослушивание от полосы прокрутки--------
// реализация блока прослушивания
public void adjustmentValueChanged(AdjustmentEvent e) {
Scrollbar sb = (Scrollbar) e.getSource();
int c = e.getValue();
setTextVal(c);
canvas.repaint();
}
Scrollbar getSb() {
return sb;
}
void setSbVal(int value) {
sb.setValue(value);
setTextVal(value);
}
void setTextVal(int value) {
tf.setText(String.valueOf(value));
}
public void addToPanel() {
Panel UpperLeft = new Panel();
UpperLeft.setLayout(new GridLayout(5,1,1,25));
UpperLeft.setBackground(colf2);
lb1 = new Label("Цвет текста:", Label.LEFT); // Создание надписи
ch = new Choice(); // Создание выпадающего списка
ch.addItem("Синий");
ch.addItem("Зеленый");
ch.addItem("Оранжевый");
ch.addItem("Красный");
ch.addItem("Черный");
//------Блок прослушивания событий от выпадающего списка-----
ch.addItemListener(new ItemListener() // регистрация
{
public void itemStateChanged(ItemEvent e) // реализация
{
String colorname = (String) e.getItem();
if ("Синий".equals(colorname)) {
canvas.setForeground(col1);
} else if ("Зеленый".equals(colorname)) {
canvas.setForeground(col2);
} else if ("Оранжевый".equals(colorname)) {
canvas.setForeground(col3);
} else if ("Красный".equals(colorname)) {
canvas.setForeground(col4);
} else if ("Черный".equals(colorname)) {
canvas.setForeground(col5);
}
canvas.repaint();
}
});
sb = new Scrollbar(Scrollbar.HORIZONTAL, k, 1, 0, 251); // полоса прокрутки
sb.addAdjustmentListener(this);// регистрация блока прослушивания
tf = new TextField(String.valueOf(k));
tf.setEditable(false); // делаем текстовое поле недоступным для
// изменения вручную
st1 = new Button("Start");
st1.addActionListener(this);
st2 = new Button("Stop");
st2.addActionListener(this);
canvas = new Canvas() // Создание панели рисования
{
public void paint(Graphics g) {
g.setFont(new Font("Courier", Font.BOLD, 70));
g.drawString(tf.getText(), x, y);
}
};
Panel DownLeft = new Panel();
DownLeft.setLayout(new GridLayout(2, 2, 10, 10));
b1 = new Button("Влево вверх");
b2 = new Button("Вправо вверх");
b3 = new Button("Влево вниз");
b4 = new Button("Вправо вниз");
// ---------------Блоки прослушивания от кнопок--------------
b1.addActionListener(new ActionListener() // регистрация
{
public void actionPerformed(ActionEvent e) // реализация
{
x = 10;
y = 60;
canvas.repaint();
}
});
b2.addActionListener(new ActionListener() // регистрация
{
public void actionPerformed(ActionEvent e) // реализация
{
x = Right.getSize().width - 130;
y = 60;
canvas.repaint();
}
});
b3.addActionListener(new ActionListener() // регистрация
{
public void actionPerformed(ActionEvent e) // реализация
{
x = 10;
y = Right.getSize().height - 10;
canvas.repaint();
}
});
b4.addActionListener(new ActionListener()// регистрация
{
public void actionPerformed(ActionEvent e) // реализация
{
x = Right.getSize().width - 130;
y = Right.getSize().height - 10;
canvas.repaint();
}
});
// -------------- Добавление компонентов на панель----------------
UpperLeft.add(lb1);
UpperLeft.add(ch);
UpperLeft.add(st1);
UpperLeft.add(st2);
UpperLeft.add(sb);
DownLeft.add(b1);
DownLeft.add(b2);
DownLeft.add(b3);
DownLeft.add(b4);
Right.add(canvas, BorderLayout.CENTER);
Left.add(UpperLeft);
Left.add(DownLeft);
add(Right);
}
// ===========================Работа с потоками=========================
public void start() // запуск потока
{
animThread = new Thread(this); // создание потока
animThread.start();// запуск объект потока
st1.setEnabled(false);
st2.setEnabled(true);
if (out != null)
writeLogMessage("Поток апплета запущен");
}
public void stop() // завершение потока
{
animThread = null;
st1.setEnabled(true);
st2.setEnabled(false);
if (out != null)
writeLogMessage("Поток апплета остановлен");
}
// Уничтожение апплета
public void destroy() {
if (out != null) {
writeLogMessage("Выполнение апплета завершено");
try {
out.close();
} catch (IOException ex) {
}
}
}
public void run() {
Thread thisThread = Thread.currentThread();// текущий поток
while ((animThread == thisThread) && (k < 251) && (t < 251))
// пока работает поток, и пока параметры (счетчики) меньше 251
{
canvas.repaint(); // перерисовка панели Right
sb.setValue(k);//полосе прокрутки устанавливается значение k
t = sb.getValue();// в t заносится значение полосы прокрутки
tf = new TextField(String.valueOf(t)); // в текстовое поле //заносится значение t
k++;
if ((k == 251) || (t == 251)) // по достижении 251 счетчик
//обнуляется
{
k = 0;
t = 0;
}
MoveText(); // запуск метода MoveText()
try {
thisThread.sleep(60); // приостановить поток
} catch (InterruptedException e) {
return; // завершить поток
}
}
}
private void MoveText() // метод для движения цифр по вертикали
{
if (y == (Right.getSize().height - 10) && dy == 1) {
dy = -1; // меняем направление движения на противоположное
}
if (y == 60 && dy == -1) {
dy = 1; // меняем направление движения на противоположное
}
y += dy;
}
public void actionPerformed(ActionEvent e) {
String acm = e.getActionCommand();
if ("Start".equals(acm))
start();
if ("Stop".equals(acm))
stop();
}
// Вывод сообщения в буферизированный поток для записи в файл
private void writeLogMessage(String message) {
try {
out.write(message);
out.newLine();
} catch (IOException ex) {
fileText.setText("Ошибка записи в файл:" + ls);
fileText.append(ex.toString() + ls);
}
}
}
- Аннотация
- Содержание
- Введение
- 1. Апплет с эффектом анимации на основе многопоточности Java и обращением к локальной файловой системе
- 2.Создание подписанного апплета .
- 2.1. Создание архивного jar-файла
- 2.2. Создание пары ключей и сертификата в хранилище ключей
- 2.3. Подписывание jar-файла цифровой подписью
- 2.4. Задание политики безопасности для подписанного апплета
- 3. Выполнение подписанного апплета
- Список использованных источников