JavaScript. Подробное руководство, 6-е издание, стр. 161
<b>var version = java.lang.System.getProperty("java.version");</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 показано, как выглядит окно приложения в процессе загрузки двух файлов.

Пример 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("Rhino URL Fetcher"); // Окно приложения </b><b>var urlfield = new JTextField(30); // Поле ввода URL </b><b>var button = new JButton("Download"); // Кнопка запуска загрузки </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 === "windowclosing") // 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, "Exception", </b>