Информационные технологии (часть 2)

9. Платформа Java

Установка

Мы будем устанавливать JDK (Java Development Kit, набор для разработки на Java). В состав этого набора входит JRE (Java Runtime Environment, окружение для выполнения Javа, собственно платформа). Если необходимо только запускать программы, то можно установить только JRE.

Под Windows

Далее предполагается, что на компьютере, на котором выполняются лабораторные работы, установленна ОС Windows. Если это не так, то часть работы, относящуюся к этой ОС можно выполнить на виртуальной машине. Виртуальные машины с Windows можно скачать тут: https://developer.microsoft.com/ru-ru/windows/downloads/virtual-machines/.

Скачайте последнюю версию OpenJDK (builds zip архив с Windows/x64 версией). Для установки и настройки также понадобится редактор переменных среды Windows Rapid Environment Editor.

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

Прочитайте про переменные среды́. С помощью RapidEE добавьте к переменной PATH текущего пользователя (на вкладке User Variables) путь к папке bin из архива.

Наберите в терминале команду java -version и убедитесь, что у Вас работает та версия OpenJDK, которую Вы устанавливали

Под Linux

Работающую виртуальную машину Java под Linux можно установить с помощью менеджера apt. Однако, во-первых, это будет не последняя версия JDK, во-вторых, на примере JDK можно рассмотреть установку скомпилированных версий программ под Linux.

Скачайте последнюю версию OpenJDK (builds tar.gz архив с Linux/x64 версией). Если вы скачивали под хостовой операционной системой, то поместите архив в общую папку, чтобы он был доступен на виртуальной машине.

Проверьте установленную версию java (с помощью команды, которой проверяли версию под Windows).

Прочитайте про встроенный архиватор Linux систем tar. Разархивируйте архив в папку /usr/lib/jvm/ командой

sudo tar -zxf 𝑎𝑟𝑐ℎ𝑖𝑣𝑒 -C /usr/lib/jvm/

Если такой папки не было, то ее нужно будет создать командой

sudo mkdir /usr/lib/jvm

Теперь нужно объяснить системе, что мы установили новую программу. В Ubuntu запускаются программы, расположенные в папке /usr/bin. Однако, размещение больших программ непосредственно в этой папке может привести в путанице, поэтому в ней часто размещают только ссылки на актуальные версии программ.

Прочитайте про символические и жесткие ссылки Linux. С помощью команды ls -al /usr/bin/ определите, где расположен браузер firefox и какого типа ссылки используются в каталоге /usr/bin.

Подсказка. В Linux имеется возможность фильтровать сообщения команд в терминале. Для этого нужно перенаправить поток сообщений в другую команду с помощью команды | и отфильтровать нужные строки командой grep 𝑓𝑖𝑙𝑡𝑒𝑟, после чего в терминал будут выведены только те строки, которые содержат 𝑓𝑖𝑙𝑡𝑒𝑟. Например, для нашего случая нужно использовать команду ls -al /usr/bin/ | grep firefox.

Для некоторых программ, таких как, например, java, для некоторых задач нужно держать на компьютере одновременно несколько версий. В этом случае работу с ссылками на эти программы можно автоматизировать с помощью утилиты update-alternatives.

Например, следующая команда создаст ссылку на java c приоритетом 1:

sudo update-alternatives --install /usr/bin/java java /𝑗𝑑𝑘_𝑑𝑖𝑟𝑒𝑐𝑡𝑜𝑟𝑦/bin/java 1

Выполните эту команду, и определите, какие ссылки были созданы.

Изменить используемую версию можно с помощью следующей команды (опробуйте и ее):

sudo update-alternatives --config java

Компиляция и запуск программ

Простое консольное приложение

Создайте в общей папки виртуальной и физической машин каталог для программ на языке Java.

В этом каталоге создайте файл hello.java со следующим содержимым:

class Hello {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Для компиляции исходных кодов на языке java используется компилятор javac. С помощью него можно скомпилировать файл hello.java следующим образом:

javac hello.java

В результате компиляции получится файл Hello.class. Это скомпилированная программа для виртуальной машины java. Запустить ее можно с помощью команды

java Hello

В качестве аргумента в этой команде указывается имя класса (не файла). Виртуальная машина ищет скомпилированный код класса в файлах с расширением .class находящихся в каталоге, из которого запущена программа. В нашем случае такой класс находится. В более сложных случаях указать расположение файлов с классами можно либо с помощью переменной среды CLASSPATH, либо с помощью ключа -classpath.

После запуска программы в терминале должна появиться фраза Hello World!. Проверьте и сравните работу этой программы под Windows и под Linux.

Приложение с графическим интерфейсом из нескольких файлов

Создайте в каталоге для программ на языке Java файл GuiMain.java:

class GuiMain{    
    public static void main(String args[]){               
        new Gui();
    }
}

и Gui.java:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Gui{
    Integer count = 0;
    public Gui(){               
        JLabel label = new JLabel(count.toString());
        JButton button = new JButton("+");
        button.addActionListener(e -> {
            label.setText((++count).toString());
        });

        JPanel panel = new JPanel();
        panel.add(label);
        panel.add(button);
        JFrame frame = new JFrame("GUI");        
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200,100); 
        frame.getContentPane().add(panel);        
        frame.setVisible(true);
    }
}

и скомпилируйте их.

Подсказка: для компиляции нескольких файлов можно указать в аргументах компилятора несколько файлов через пробел или использовать символы подстановки * и ?.

Проверьте и сравните работу класса GuiMain под Windows и под Linux.

Программы, содержащие несколько файлов с классами, для удобства использования принято упаковывать в архив типа .jar. Соберите такой архив для нашей программы с помощью команды

jar cfe gui.jar GuiMain Gui.class GuiMain.class

Тут ключ c означает, что создается архив типа .jar; ключ f указывает, что результат нужно записать в файл, который указан далее (gui.jar); ключ e позволяет установить класс, который запускается при запуске архива на выполнение (GuiMain); далее через пробел записываются файлы или каталоги с файлами, которые нужно поместить в архив.

Запустить архив на выполнение можно с помощью ключа -jar:

java -jar gui.jar

Выполните и сравните работу полученного файла .jar под Windows и под Linux.

Определите размер архива .jar. Распакуйте его обычным архиватором. Найдите, где находится метаинформация о программе, в частности, где указывается запускаемый класс.