Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Герберт Шилдт. Java 2, v5.0 (Tiger). Новые возм...doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
1.21 Mб
Скачать

Модернизация других классов и интерфейсов для применения настраиваемых типов

Некоторые другие классы, интерфейсы и методы в API языка Java были модернизированы для применения настраиваемых типов. Например, в следующей строке перечислены интерфейсы и классы из пакета java.lang, ставшие теперь настраиваемыми:

Comparable<T> Class<T> ThreadLocal<T>

Новый класс Enum и интерфейс Iterable — теперь тоже настраиваемые. В пакете java.lang.reflect класс Constructor — также настраиваемый.

Новые классы и интерфейсы, добавленные в пакет java.Lang

Версия Java 2 5.0 добавляет в пакет java.lang три новых класса и три новых интерфейса.

Далее перечислены новые классы:

Enum ProcessBuilder StringBuilder

В следующей строке приведены новые интерфейсы:

Appendable Iterable<T> Readable

Класс Enum подробно рассмотрен в главе 6. Оставшиеся классы и интерфейсы описаны в последующих разделах этой главы.

Класс ProcessBulider

Это новый класс, добавленный в пакет java.lang. Он обеспечивает запуск процессов (т. е. программ) и управление ими. Как Вы помните, все процессы представлены классом Process, и до выхода Java 2, v5.0 процесс запускался с помощью вызова метода Runtime.exec(). Класс ProcessBuilder предлагает больше возможностей контроля над процессами, чем раньше. Например, можно установить текущий рабочий каталог и изменить параметры окружения.

В классе ProcessBuilder определены следующие конструкторы:

ProcessBuilder(List<String> args)

ProcessBuilder(String...args)

Параметр args — список аргументов, содержащий имя программы для выполнения вместе с любыми требуемыми аргументами командной строки. В первом варианте конструктора аргументы передаются в объект класса List. Во втором — задаются как параметр переменной длины. В табл. 10.1 приведены методы, определенные в классе ProcessBuilder.

Метод

Описание

List<String> command()

Возвращает ссылку на объект класса List, который содержит имя программы и ее аргументы. Изменения в этом списке воздействуют на вызывающий процесс

ProcessBuilder command(List<String> args)

Устанавливает имя программы и ее аргументы, передавая их в параметре переменной длины args. Изменения в этом списке воздействуют на вызывающий процесс

ProcessBuilder command(String...args)

Устанавливает имя программы и ее аргументы, передавая их в параметре переменной длины args

ProcessBuilder directory(File dir)

Устанавливает текущий рабочий каталог вызывающего обьекта класса ProcessBuilder

Map<String, String> environment()

Возвращает переменные окружения, связанные с вызывающим объектом типа ProcessBuilder в виде пар: ключ/значение

boolean redirectErrorStream()

Возвращает значение true, если стандартный поток сообщений об ошибках был перенаправлен в стандартный поток вывода. Возвращает false, если потоки разделены

ProcessBuilder redirectErrorStream(boolean merge)

Если параметр merge равен true, стандартный поток сообщений об ошибках перенаправляется в стандартный поток вывода. Если параметр merge равен false, потоки разделены, такое состояние принято по умолчанию

Process start() throws IOException

Запускает процесс, заданный вызывающим объектом типа ProcessBuilder

File directory()

Возвращает текущий рабочий каталог вызывающего объекта типа ProcessBuilder. Это значение будет равно null, если каталог тот же, что и у программы, запустившей процесс

Для формирования процесса с помощью класса ProcessBuilder, Вы просто создаете экземпляр типа ProcessBuilder, указывая имя программы и любые необходимые аргументы. Для того чтобы запустить программу, вызовите метод start () для этого экземпляра. В листинге 10.1 приведен простой пример, запускающий Notepad, текстовый редактор операционной системы Windows. Обратите внимание на то, что имя файла для редактирования передается как аргумент.

Листинге 10.1 Применение класса ProcessBuilder

import java.io.*;

class PBDemo {

public static void main(String args[])

throws IOException {

ProcessBuilder proc = new ProcessBuilder("notepad.exe", "testfile");

proc.start();

}

}