Java swing tutorial: examples to create gui

Альтернативы

  • Полная пересборка WAR-файла и копирование в Tomcat/webapps. Самое надёжное и самое медленное решение. Представьте себе, ждать 1-15 минут после каждого изменения CSS! Нет уж, увольте. Минус: ужасно долго. Минус: дебаг придётся отдельно настраивать (remote debug). Пусть это не очень сложно, но всё-таки лишние усилия.
  • MyEclipse Платная IDE на базе Eclipse. При компиляции проекта копирует все ресурсы в отдельную папку — у меня это работало ужасно долго. Также у меня остались неприятные воспоминания от заморочек с настройкой.
  • Eclipse WTP (Web Tools Platform) — бесплатный, но тяжёлый плагин для Eclipse Я несколько раз пытался, но так и не смог настроить его так, как мне надо. Плюс: умеет работать с несколькими разными контейнерами (Tomcat, JBoss и т.д.) Впрочем, вот тут Akvel рассказывает, как он безболезненно использует Eclipse WTP.
  • Application Server integrations аналог Eclipse WTP, доступный только в платной версии Intellij IDEA. Минус: платный.
  • JRebel Помимо своей основной задачи, JRebel позволяет конфигурировать ClassPath приложений прямо из проектов. Минус: JRebel платный. Плюс: если ваш работодатель на него раскошелится, JRebel может сильно упростить и ускорить работу разработчика.
  • Play! framework Умеет запускать приложение прямо из проекта и перегружать изменённый код на лету. Очень удобно. Минус: вы ограничены одним фреймворком, у которого есть свои особенности и ограничения.
  • Run Jetty Run Плагин для Eclipse, позволяющий запускать Jetty с приложением прямо из проекта. По сути, он делает в точности то же, что описано в этой статье. Плюс: содержит в себе все необходимые jar’ы, вам не придётся ничего дополнительно скачивать, кроме самого плагина. Минус: умеет запускать только один проект. Минус: не умеет настраивать соединение с базой данных. Придётся по-любому делать это руками.
  • Jetty Maven plugin Как подсказывает 1nd1go, если в вашем проекте используется Maven, вы можете запускать веб-приложения командой «». Плюс: если используете плагин для Maven в своей IDE, можете запускать эту команду прямо из IDE; при этом можно и дебажить, т.к. jetty плагин запускается в том же процессе, что и мавен. Минус: вы привязаны к системе сборки (maven) и к IDE.
  • Jetty Gradle plugin Если в вашем проекте используется Gradle, вы можете запускать веб-приложения командой «». Плюс: эту команду прямо из IDE (даже без всяких плагинов), при этом можно и дебажить. Минус: вы привязаны к системе сборки (gradle).
  • Sysdeo Eclipse Tomcat Launcher plugin Как подсказывает helions8, для Eclipse есть хороший плагин Sysdeo Tomcat launcher, который позволяет совместить контекст томката и проекта, потому не нужно собирание war-файла и подкладывание его контейнеру, всякий css, html и прочий js правится сразу, на горячую. В большинстве случаев работает hot replace. По сути, этот плагин делает то же самое, что и наш Launcher Минус: вы привязаны к Eclipse. Минус: требует больше суеты. Надо и Tomcat самому скачать, и какой-то новый «tomcat project» создать — в общем, вполне неплохое средство, но запускалка проще.
  • Spring source tool suite Как подсказывает alexeygrigorev, для Eclipse есть плагин Spring source tool suite, который имеет встроенный «навороченный томкат», умеющий редеплоить при сохранении файлов Минус: вы привязаны к Eclipse и STS.

embeddedTomcatGlassfish


Setup for Windows

To install Java on Windows:

  1. Go to «System Properties» (Can be found on Control Panel > System and Security > System > Advanced System Settings)
  2. Click on the «Environment variables» button under the «Advanced» tab
  3. Then, select the «Path» variable in System variables and click on the «Edit» button
  4. Click on the «New» button and add the path where Java is installed, followed by \bin. By default, Java is installed in C:\Program Files\Java\jdk-11.0.1 (If nothing else was specified when you installed it). In that case, You will have to add a new path with: C:\Program Files\Java\jdk-11.0.1\bin Then, click «OK», and save the settings
  5. At last, open Command Prompt (cmd.exe) and type java -version to see if Java is running on your machine

Параметры

Конструктор может принимать параметры, которые потом используются для инициализации внутреннего состояния (полей) вновь созданного объекта:

public class Employee {

    private String firstName = null;
    private String lastName  = null;
    private int    birthYear = 0;


    public Employee(String first,
        String last,
        int    year   ) {

        firstName = first;
        lastName  = last;
        birthYear = year;
    }
    

}

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

Разрывы строки на Java после каждого параметра являются необязательными. Компилятор здесь игнорирует разрывы строк. Вы также можете написать объявление параметра в одну строку, если хотите, например:

public Employee(String first, String last, int year ) {
    firstName = first;
    lastName  = last;
    birthYear = year;
}

Чтобы вызвать этот конструктор, который принимает три параметра, вы должны создать экземпляр объекта Employee следующим образом:

Employee employee = new Employee("Jack", "Daniels", 2000);

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

Параметр конструктора может иметь то же имя, что и поле. В этом случае у компилятора возникают проблемы, зная, на что вы ссылаетесь. По умолчанию, если параметр (или локальная переменная) имеет то же имя, что и поле в том же классе, параметр (или локальная переменная) «затеняет» поле. Посмотрите на этот пример:

public class Employee {

    private String firstName = null;
    private String lastName  = null;
    private int    birthYear = 0;


    public Employee(String firstName,
        String lastName,
        int    birthYear ) {

        firstName = firstName;
        lastName  = lastName;
        birthYear = birthYear;
    }
    
}

Внутри конструктора класса Employee идентификаторы firstName, lastName и birthYear теперь ссылаются на параметры конструктора, а не на поля Employee с одинаковыми именами. Таким образом, конструктор теперь просто устанавливает параметры, равные им самим. Поля Сотрудника никогда не инициализируются.

Чтобы сообщить компилятору, что вы имеете в виду поля класса Employee, а не параметры, поместите ключевое слово this и точку перед именем поля:

public class Employee {

    private String firstName = null;
    private String lastName  = null;
    private int    birthYear = 0;


    public Employee(String firstName,
        String lastName,
        int    birthYear ) {

        this.firstName = firstName;
        this.lastName  = lastName;
        this.birthYear = birthYear;
    }
    
}

Теперь поля Employee правильно инициализируются внутри конструктора.

Особенности AWT в Java

  • AWT – это набор компонентов собственного интерфейса пользователя.
  • Он основан на надежной модели обработки событий
  • Он предоставляет графические и графические инструменты, такие как формы, цвета и классы шрифтов.
  • AWT также использует менеджеры по расположению, которые помогают в увеличении гибкости расположения окон
  • Классы передачи данных также являются частью AWT, которая помогает вырезать и вставлять через родной буфер обмена платформы
  • Поддерживает широкий спектр библиотек, необходимых для создания графики для игровых продуктов, банковских услуг, образовательных целей и т. д.

Как установить maven

Maven устанавливается просто копированием в нужную директорию — никакого инсталлера нет. Как и в случае с большинством консольных утилит для использования достаточно добавить директорию maven/bin в переменную окружения PATH.

То есть, если maven находится в d:/soft/maven, то в PATH надо добавить d:/soft/maven/bin

Ещё для работы maven потребует переменную JAVA_HOME, которая указывает на JDK. Если JDK находится в C:/Program Files/Java/jdk1.8.0_05, то именно такое значение нужно поместить в JAVA_HOME. Добавлять bin в конец не нужно.

После этого можно попробовать написать в консоли

Если получится, значит maven установлен.

Упражнение 3: Добавление функциональности

В этом упражнении будет добавлена необходимая функциональность к кнопкам «Add», «Clear» и «Exit». Поля и будут использоваться для ввода значений пользователем, а – для вывода результата работы программы. Создаваемая программа представляет собой простейший калькулятор. Итак, приступим!

Добавление функциональности к кнопке «Exit»

Для того чтобы кнопки стали функциональными, каждой из них необходимо присвоить обработчик событий, который будет отвечать за реагирование на события. В нашем случае требуется идентифицировать событие нажатия кнопки – путем щелчка мышью или с помощью клавиатуры. Поэтому будет использоваться интерфейс «ActionListener», предназначенный для обработки событий «ActionEvent».

  1. Щелкните правой кнопкой мыши кнопку «Exit». Во всплывающем меню выберите Events («События») > Action («Действие») > actionPerformed. Учтите, что меню содержит множество других событий, на которые может реагировать программа! При выборе события actionPerformed среда IDE автоматически добавит прослушиватель ActionListener к кнопке Exit («Выход») и создаст метод обработчика для обработки метода прослушивателя actionPerformed.
  2. В среде IDE автоматически открывается окно «Source Code», где отображается место вставки действия, которое должно выполняться кнопкой при ее нажатии (с помощью мыши или клавиатуры). Окно «Source Code» должно содержать следующие строки:
    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        //TODO add your handling code here:
                    }
  3. Теперь добавим код действия, которое должна выполнять кнопка «Exit». Замените строку TODO на . Готовый код кнопки «Exit» должен выглядеть следующим образом:

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
        System.exit(0);
                    } 

Добавление функциональности к кнопке «Clear»

  1. Щелкните вкладку «Design» в верхней части рабочей области для возврата к экрану «Form Design».
  2. Щелкните правой кнопкой мыши кнопку «Clear» (). В появившемся меню выберите «Events > Action > actionPerformed».
  3. Нажатие кнопки «Clear» должно приводить к удалению всего текста из всех текстовых полей «jTextField». Для этого следует добавить код, аналогичный приведенному выше. Готовый исходный код должен выглядеть следующим образом:
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
        jTextField1.setText("");
        jTextField2.setText("");
        jTextField3.setText("");
                    }

Этот код удаляет текст из всех трех полей JTextField, оставляя их пустыми.

Добавление функциональности к кнопке «Add»

Кнопка «Add» должна выполнять три действия.

  1. Сначала она принимает данные, введенные пользователем в полях и , и преобразовывает их из типа «String» в тип «Float».
  2. Затем она выполнит сложение двух чисел.
  3. И, наконец, она преобразует сумму в тип String и поместит ее в .

Начнем!

  1. Щелкните вкладку «Design» в верхней части рабочей области для возврата к экрану «Form Design».
  2. Щелкните правой кнопкой мыши кнопку «Add» (). Во всплывающем меню выберите Events («События») > Action («Действие») > actionPerformed.
  3. Добавьте код действий, которые должна выполнять кнопка «Add». Готовый исходный код должен выглядеть следующим образом:
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){
        // First we define float variables.
        float num1, num2, result;
        // We have to parse the text to a type float.
        num1 = Float.parseFloat(jTextField1.getText());
        num2 = Float.parseFloat(jTextField2.getText());
       // Now we can perform the addition.
        result = num1+num2;
        // We will now pass the value of result to jTextField3.
        // At the same time, we are going to
        // change the value of result from a float to a string.
        jTextField3.setText(String.valueOf(result));
                        }

Теперь программа полностью готова, и можно приступить к ее сборке и выполнению.

Вызов в суперклассах

В класс может расширять другой. В этом случае говорят, что он «наследует» от класса, который он расширяет. Расширяемый класс называется подклассом, а расширяемый – суперклассом.

Класс, который расширяет другой, не наследует его конструкторы. Однако подкласс должен вызывать конструктор в суперклассе внутри одного из конструкторов подкласса!

Класс Car расширяет (наследует) класс Vehicle:

public class Vehicle {
    private String regNo = null;

    public Vehicle(String no) {
        this.regNo = no;
    }
}
public class Car extends Vehicle {
    private String brand = null;

    public Car(String br, String no) {
        super(no);
        this.brand = br;
    }
}

Обратите внимание на конструктор в классе Car. Он вызывает конструктор в суперклассе, используя этот оператор:

super(no);

Использование ключевого слова super относится к суперклассу класса. Когда за ключевым словом следуют круглые скобки, как здесь, это относится к конструктору в суперклассе. В этом случае это относится к конструктору в классе Vehicle. Поскольку Car расширяет Vehicle, все конструкторы Car должен вызывать конструктор в Vehicle.

Java GridBagLayout

It is the more sophisticated of all layouts. It aligns components by placing them within a grid of cells, allowing components to span more than one cell.

Step 8) How about creating a chat frame like below?

Try to code yourself before looking at the program below.

//Usually you will require both swing and awt packages
// even if you are working with just swings.
import javax.swing.*;
import java.awt.*;
class gui {
    public static void main(String args[]) {

        //Creating the Frame
        JFrame frame = new JFrame("Chat Frame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);

        //Creating the MenuBar and adding components
        JMenuBar mb = new JMenuBar();
        JMenu m1 = new JMenu("FILE");
        JMenu m2 = new JMenu("Help");
        mb.add(m1);
        mb.add(m2);
        JMenuItem m11 = new JMenuItem("Open");
        JMenuItem m22 = new JMenuItem("Save as");
        m1.add(m11);
        m1.add(m22);

        //Creating the panel at bottom and adding components
        JPanel panel = new JPanel(); // the panel is not visible in output
        JLabel label = new JLabel("Enter Text");
        JTextField tf = new JTextField(10); // accepts upto 10 characters
        JButton send = new JButton("Send");
        JButton reset = new JButton("Reset");
        panel.add(label); // Components Added using Flow Layout
        panel.add(tf);
        panel.add(send);
        panel.add(reset);

        // Text Area at the Center
        JTextArea ta = new JTextArea();

        //Adding Components to the frame.
        frame.getContentPane().add(BorderLayout.SOUTH, panel);
        frame.getContentPane().add(BorderLayout.NORTH, mb);
        frame.getContentPane().add(BorderLayout.CENTER, ta);
        frame.setVisible(true);
    }
}

Метка

Класс java.awt.Label предоставляет текстовую строку с описанием, видимую в графическом интерфейсе. Объект метки AWT – это компонент для размещения текста в контейнере. Класс Label имеет три конструктора:

// Construct a Label with the given text String, of the text alignment
public Label(String strLabel, int alignment); 

//Construct a Label with the given text String
public Label(String strLabel);

//Construct an initially empty Label
public Label();

Этот класс также предоставляет 3 константы:

public static final LEFT; // Label.LEFT

public static final RIGHT;  // Label.RIGHT

public static final CENTER; // Label.CENTER

Ниже я перечислил открытые методы, предоставляемые этим классом:

public String getText();

public void setText(String strLabel);

public int getAlignment();

//Label.LEFT, Label.RIGHT, Label.CENTER 
public void setAlignment(int alignment);

Exercise 4: Running the Program

To run the program in the IDE:

  1. Choose Run > Run Project (Number Addition) (alternatively, press F6).

    Note: If you get a window informing you that Project NumberAddition does not have a main class set, then you should select my.NumberAddition.NumberAdditionUI as the main class in the same window and click the OK button.

To run the program outside of the IDE:

  1. Choose Run > Clean and Build Main Project (Shift-F11) to build the application JAR file.
  2. Using your system’s file explorer or file manager, navigate to the directory.

    Note: The location of the NumberAddition project directory depends on the path you specified while creating the project in step 3 of the section.

  3. Double-click the file.

After a few seconds, the application should start.

Note: If double-clicking the JAR file does not launch the application, see for information on setting JAR file associations in your operating system.


You can also launch the application from the command line.

To launch the application from the command line:

  1. On your system, open up a command prompt or terminal window.
  2. In the command prompt, change directories to the directory.
  3. At the command line, type the following statement:
    java -jar  NumberAddition.jar

    Note: Make sure my.NumberAddition.NumberAdditionUI is set as the main class before running the application. You can check this by right-clicking the NumberAddition project node in the Projects pane, choosing Properties in the popup menu, and selecting the Run category in the Project Properties dialog box. The Main Class field should display my.numberaddition.NumberAdditionUI.

Использование метода newInstance() класса Class

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

  1. ClassNotFoundException – это исключение происходит, если JVM не может найти класс, который передается в качестве аргумента.
  2. InstantiationException – это исключение возникает, если данный класс не содержит конструктор по умолчанию.
  3. IllegalAccessException – это исключение происходит, если у нас нет доступа к указанному классу.

Пример

class ObjectCreation{
   String FirstString = "Hello World";
   public static void main(String[] args)
   {
       try
       {
           Class Message = Class.forName("ObjectCreation");
           ObjectCreation obj =
                   (ObjectCreation) Message.newInstance();
           System.out.println(obj.FirstString);
       }
       catch (ClassNotFoundException e)
       {
           e.printStackTrace();
       }
       catch (InstantiationException e)
       {
           e.printStackTrace();
       }
       catch (IllegalAccessException e)
       {
           e.printStackTrace();
       }
   }

}

Выход – Hello World

Разработка калькулятора с помощью Java AWT

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

Теперь, чтобы построить это, вам нужно ввести следующий код:

package edureka.awt;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

class Calculator extends Frame implements ActionListener

{
    Label lb1,lb2,lb3;

    TextField txt1,txt2,txt3;

    Button btn1,btn2,btn3,btn4,btn5,btn6,btn7;

    public Calculator()
    {
        lb1 = new Label("Var 1");
        lb2 = new Label("Var 2");
        lb3 = new Label("Result");

        txt1 = new TextField(10);
        txt2 = new TextField(10);
        txt3 = new TextField(10);

        btn1 = new Button("Add");
        btn2 = new Button("Sub");
        btn3 = new Button("Multi");
        btn4 = new Button("Div");
        btn5 = new Button("Mod");
        btn6 = new Button("Reset");
        btn7 = new Button("Close");

            add(lb1);
            add(txt1);
            add(lb2);
            add(txt2);
            add(lb3);
            add(txt3);
            add(btn1);
            add(btn2);
            add(btn3);
            add(btn4);
            add(btn5);
            add(btn6);
            add(btn7);
            
            setSize(200,200);
            setTitle("Calculator");
            setLayout(new FlowLayout());
            //setLayout(new FlowLayout(FlowLayout.RIGHT));
            //setLayout(new FlowLayout(FlowLayout.LEFT));
            btn1.addActionListener(this);
            btn2.addActionListener(this);
            btn3.addActionListener(this);
            btn4.addActionListener(this);
            btn5.addActionListener(this);
            btn6.addActionListener(this);
            btn7.addActionListener(this);
            
    }
    public void actionPerformed(ActionEvent ae) {
        double a=0,b=0,c=0;
        try
        {
            a = Double.parseDouble(txt1.getText());
        }
        catch (NumberFormatException e) {
            txt1.setText("Invalid input");
        }
        try
        {
            b = Double.parseDouble(txt2.getText());
        }
        catch (NumberFormatException e) {
            txt2.setText("Invalid input");
        }
        if(ae.getSource()==btn1)
        {
            c = a + b;
            txt3.setText(String.valueOf(c));
        }
        if(ae.getSource()==btn2)
        {
            c = a - b;
            txt3.setText(String.valueOf(c));
        }
        if(ae.getSource()==btn3)
        {
            c = a * b;
            txt3.setText(String.valueOf(c));
        }
        if(ae.getSource()==btn4)
        {
            c = a / b;
            txt3.setText(String.valueOf(c));
        }
        if(ae.getSource()==btn5)
        {
            c = a % b;
            txt3.setText(String.valueOf(c));
        }
        if(ae.getSource()==btn6)
        {
            txt1.setText("0");
            txt2.setText("0");
            txt3.setText("0");
        }
        if(ae.getSource()==btn7)
        {
            System.exit(0);           
        }     
    }
    public static void main(String[] args)
    {
        Calculator calC = new Calculator();
        calC.setVisible(true);
        calC.setLocation(300,300);
    }
}

Как вы могли заметить, здесь мы использовали только функциональные возможности. Вы всегда можете добавить больше функций в свое приложение и создать полноценный калькулятор.

Практическая информация

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

Какую версию Java я должен использовать?

Новые версии Java теперь выходят каждые 6 месяцев. Следовательно, Java 15 запланирована на сентябрь 2020 года, Java 16 на март 2021 года и так далее. В прошлом циклы выпуска Java были намного длиннее, до 3-5 лет. Этот график демонстрирует это:

С появлением такого количества новых версий в действительности имеются следующие основные сценарии использования:

  • Унаследованные проекты в компаниях часто связаны с использованием Java 8 (см. Раздел «Почему компании все еще застревают на Java 8?» Ниже). Таким образом, вы также будете вынуждены использовать Java 8.
  • Некоторые унаследованные проекты даже работают на Java 1.5 (выпущен в 2004 г.) или 1.6 (выпущен в 2006 г.) — сожалею, друзья!
  • Если вы уверены, что используете самые последние IDE, интегрированные среды и инструменты сборки и запускаете новый проект, вы можете без колебаний использовать Java 11 (LTS) или даже самую последнюю версию Java 14.

Почему компании все еще застряли на Java 8?

Существует множество разных причин, по которым компании все еще придерживаются Java 8. Вот некоторые из них:

  • В некоторых компаниях действуют политики, позволяющие использовать только версии LTS, и полагаются на поставщиков своих ОС для предоставления этих сборок, что требует времени.

Подводя итог, у вас есть сочетание практических вопросов (обновление ваших инструментов, библиотек, фреймворков) и политических проблем.

Почему некоторые версии Java называются 1.X?

Java до версии 9 просто имела другую схему именования. Итак, Java 8 также может называться 1.8, Java 5 может называться 1.5 и т.д. Когда вы выполнили команду java -version с этими версиями, вы получили такой вывод:

Это просто означает Java 8. С переходом к основанным на времени выпускам с Java 9 также изменилась схема именования, и версии Java больше не имеют префикса 1.x. Теперь номер версии выглядит так:

В чем разница между версиями Java?

Должен ли я изучать конкретную?

Придя из других языков программирования с большими перерывами между выпусками, как, например, Python 2–3, вы можете спросить, применимо ли это к Java.

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

Очевидно, что это не работает наоборот, скажем, ваша программа использует функции Java 14, которые просто недоступны в Java 8 JVM.

Это означает несколько вещей:

  • Вы не просто «изучаете» конкретную версию Java, например Java 12.
  • Скорее, вам нужно получить хорошую основу для всех языковых возможностей вплоть до Java 8.
  • И затем, из этого руководства вы можете узнать, какие дополнительные функции появились в Java 9-14, чтобы использовать их всегда, когда это возможно.

Каковы примеры этих новых возможностей новых версий Java?


Взгляните на раздел «Возможности Java 8-14» ниже.

Но, как правило: старые, более длинные циклы выпуска (3-5 лет, вплоть до Java 8) означали множество новых функций в каждом выпуске.

Шестимесячный цикл выпуска означает меньшее количество функций на выпуск, поэтому вы можете быстро освоить языковые функции Java 9-14.

В чем разница между JRE и JDK?

До сих пор мы говорили только о Java. Но что именно означает «Java»?

Во-первых, вам нужно провести различие между JRE (Java Runtime Environment) и JDK (Java Development Kit).

Исторически, вы загружали только JRE, если вас интересовали только программы Java. JRE включает, помимо прочего, виртуальную машину Java (JVM) и инструмент командной строки «java».

Для разработки новых программ на Java вам нужно было загрузить JDK. JDK включает в себя все, что есть в JRE, а также компилятор javac и несколько других инструментов, таких как javadoc (генератор документации Java) и jdb (отладчик Java).

Теперь, почему я говорю в прошедшем времени?

Вплоть до Java 8 веб-сайт Oracle предлагал JRE и JDK в качестве отдельных загрузок, хотя JDK также всегда включал JRE в отдельной папке. В Java 9 это различие практически исчезло, и вы всегда загружаете JDK. Структура каталогов JDK также изменилась, так как в ней больше не было явной папки JRE.

Таким образом, хотя некоторые дистрибутивы (см. Раздел «Дистрибутивы Java») по-прежнему предлагают отдельную загрузку JRE, похоже, существует тенденция предлагать только JDK. Следовательно, теперь мы будем использовать Java и JDK взаимозаменяемо.

Как мне установить Java или JDK?

На данный момент не обращайте внимания на образы Java-Docker, оболочки MSI или пакеты для конкретной платформы. В конце концов, Java — это просто файл .zip; ни больше ни меньше.

Поэтому все, что вам нужно сделать, чтобы установить Java на свой компьютер, — это разархивировать файл jdk-{5-14}.zip. Вам даже не нужны права администратора для этого.

Ваш распакованный файл Java будет выглядеть так:

Магия происходит в каталоге /bin, который в Windows выглядит следующим образом:

Поэтому все, что вам нужно сделать, это разархивировать этот файл и поместить каталог /bin в переменную PATH, чтобы вы могли вызывать команду java из любого места.

В случае, если вам интересно, установщики с графическим интерфейсом, такие как Oracle или AdoptOpenJDK, выполняет распаковку и изменение переменной PATH вместо вас.

Чтобы убедиться, что вы правильно установили Java, вы можете просто выполнить команду java -version. Если вывод выглядит так, как показано ниже, вы готовы!

Теперь остался один вопрос: откуда вам взять этот .zip файл с Java? Что подводит нас к теме дистрибутивов.


С этим читают