JavaScript. Подробное руководство, 6-е издание, стр. 161

<b>var version = java.lang.System.getProperty(&quot;java.version&quot;);</b>

После выполнения этой инструкции переменная version будет хранить объект java.lang.String. Он обычно ведет себя как JavaScript-строка, но существуют важные отличия. Во-первых, Java-строка вместо свойства length имеет метод length(). Во-вторых, оператор typeof возвращает тип «object» для Java-строк. Java-строку нельзя преобразовать в JavaScript-строку вызовом метода toString(), потому что все Java-объекты имеют собственные методы toString(), возвращающие экземпляры javadang.String. Чтобы преобразовать Java-значение в строку, его нужно передать JavaScript-функции String():

var version = String(java.lang.System.getPropertyC'java.version"));

12.1.1. Пример использования Rhino

В примере 12.1 приводится простое приложение для интерпретатора Rhino, демонстрирующее большую часть возможностей и приемов, описанных выше. Пример использует пакет javax.swing со средствами построения графических интерфейсов, пакет java.net с инструментами организации сетевых взаимодействий, пакет java.io потокового ввода/вывода и инструменты языка Java многопоточного выполнения для реализации простого приложения менеджера загрузки, которое загружает файлы по адресам URL и отображает ход выполнения загрузки. На рис. 12.1 показано, как выглядит окно приложения в процессе загрузки двух файлов.

JavaScript. Подробное руководство, 6-е издание - i_019.jpg

Пример 12.1. Приложение менеджера загрузки для Rhino

<b>/* </b>

<b>* Приложение менеджера загрузки с простым графическим интерфейсом, </b>

<b>* построенным средствами языка Java </b>

<b>*/ </b>

<b>// Импортировать графические компоненты из библиотеки Swing </b>

<b>// и несколько других классов </b>

<b>importPackage(javax.swing); </b>

<b>importClass(javax.swing.border.EmptyBorder); </b>

<b>importClass(java.awt.event.ActionListener); </b>

<b>importClass(java.net.URL); </b>

<b>importClass(java.io.FileOutputStream); </b>

<b>importClass(java.lang.Thread); </b>

<b>// Создать графические элементы управления </b>

<b>var frame = new JFrame(&quot;Rhino URL Fetcher&quot;); // Окно приложения </b>

<b>var urlfield = new JTextField(30);  // Поле ввода URL </b>

<b>var button = new JButton(&quot;Download&quot;); // Кнопка запуска загрузки </b>

<b>var fil-echooser = new JFileChooser(); // Диалог выбора файла </b>

<b>var row = Box.createHorizontalBox(); // Контейнер для поля и кнопки </b>

<b>var col = Box.createVerticalBox(); // Для строки и индикатора хода </b>

<b>                                   // выполнения операции </b>

<b>var padding = new EmptyBorder(3.3,3,3); // Отступы для строк </b>

<b>// Объединить все компоненты и отобразить графический интерфейс </b>

<b>row.add(urlfield); // Поместить поле ввода в строку </b>

<b>row.add(button); // Поместить кнопку в строку </b>

<b>col.add(row);// Поместить строку в колонку </b>

<b>frame.add(col); // Поместить колонку во фрейм </b>

<b>row.setBorder(padding); // Добавить отступы вокруг строки </b>

<b>frame.pack(); // Определить минимальный размер </b>

<b>frame.visible = true; // Вывести окно </b>

<b>// Эта функция вызывается, когда в окне что-то происходит, </b>

<b>frame.addWindowListener(function(e, name) { </b>

<b>  // Если пользователь закрыл окно, завершить приложение, </b>

<b>  if (name === &quot;windowclosing&quot;) // Rhino добавляет аргумент name </b>

<b>  java.lang.System.exit(0); </b>

<b>}); </b>

<b>// Эта функция вызывается, когда пользователь щелкает на кнопке </b>

<b>button.addActionListener(function() { </b>

<b>  try { </b>

<b>    // Создать объект java.net.URL для представления URL источника. </b>

<b>    // (Автоматически будет проверена корректность ввода пользователя) </b>

<b>    var url = new URL(urlfield.text); </b>

<b>    // Предложить пользователю выбрать файл для сохранения содержимого URL </b>

<b>    var response = filechooser.showSaveDialog(fгате); </b>

<b>    // Завершить, если пользователь щелкнул на кнопке Cancel </b>

<b>    if (response != JFileChooser.APPROVE.OPTION) return; </b>

<b>    // Иначе получить объект java.io.File, представляющий файл назначения </b>

<b>    var file = filechooser.getSelectedFile(); </b>

<b>    // Запустить новый поток выполнения для загрузки url </b>

<b>    new java.lang.Thread(function() { </b>

<b>      download(url,file); }).start(); </b>

<b>  } </b>

<b>  catch(e) { </b>

<b>    // Вывести диалог, если что-то пошло не так </b>

<b>    JOptionPane.showMessageDialog(frame, е.message, &quot;Exception&quot;, </b>