Spec-Zone .ru
спецификации, руководства, описания, API
|
Java™ Standard Edition версия 6 сужает разрыв между производительностью и интеграцией собственных приложений и приложений Java. Наряду с новой функциональностью системного лотка, поддержкой экрана-заставки, и печатью с расширенными возможностями для JTables, Java версия 6 SE обеспечивает Настольный API (java.awt.Desktop
) API, который позволяет приложениям Java взаимодействовать с приложениями значения по умолчанию, связанными с определенными типами файла на платформе узла.
Новая функциональность обеспечивается Desktop
class. API является результатом Компонентов Интеграции JDesktop (JDIC) проект. Цель проекта JDIC состоит в том, чтобы сделать "Java основанными на технологии приложениями первые-class граждане" рабочего стола, включая интеграции без шва. JDIC предоставляет приложениям Java доступ к функциональности и услугам, предоставленным собственным рабочим столом. Относительно нового Настольного API это означает, что приложение Java может выполнить следующие операции:
Настольный API использует ассоциации файла операционной системы узла, чтобы запустить приложения, связанные с определенными типами файла. Например, если текст OpenDocument (.odt) расширения файла связывается с приложением Писателя OpenOffice, приложение Java могло запустить Писателя OpenOffice, чтобы открыть, отредактировать, или даже напечатать файлы с той ассоциацией. В зависимости от хост-системы различные приложения могут быть связаны с различными действиями. Например, если определенный файл не может быть напечатан, проверьте сначала, есть ли у его расширения ассоциация печати на данной операционной системе.
Используйте isDesktopSupported()
isDesktopSupported()
возвращает true, приложение может получить a Desktop
экземпляр используя статический метод getDesktop()
Если приложение работает в среде без клавиатуры, мыши, или монитора ("бездисплейная" среда), getDesktop()
метод бросает a java.awt.HeadlessException
.
После того, как полученный, Desktop
экземпляр позволяет приложению просматривать, отправлять по почте, открывать, редактировать, или даже печатать файл или URI, но только если полученный Desktop
экземпляр поддерживает эти действия. Каждое из этих действий вызывают действием, и каждый представляется как a Desktop.Action
экземпляр перечисления:
BROWSE
— Представляет действие обзора, выполняемое браузером значения по умолчанию узла.MAIL
— Представляет почтовое действие, выполняемое почтовым клиентом значения по умолчанию узла.OPEN
— Представляет открытое действие, выполняемое приложением, связанным с открытием определенного типа файла.EDIT
— Представляет действие редактирования, выполняемое приложением, связанным с редактированием определенного типа файлаPRINT
— Представляет действие печати, выполняемое приложением, связанным с печатью определенного типа файла.Различные приложения могут быть зарегистрированы для этих различных действий даже на том же самом типе файла. Например, браузер Firefox может быть запущен для ОТКРЫТОГО действия, Emacs для действия РЕДАКТИРОВАНИЯ, и все же различного приложения для действия ПЕЧАТИ. Ваши настольные ассоциации узла используются, чтобы определить, какое приложение должно быть вызвано. Возможность управлять ассоциациями файла на рабочем столе не возможна с текущей версией Настольного API в JDK 6, и те ассоциации могут быть созданы или изменены только с зависимыми от платформы инструментами в это время.
Следующий пример показывает упомянутые выше возможности.
http://docs.oracle.com/javase/tutorial
.mailto
схема, поддерживающая CC, BCC, ПРЕДМЕТ, и поля BODY, например – duke@example.com?SUBJECT=Hello Duke!
..odt
, .html
, .pdf
. Отметьте: Если Вы пытаетесь отредактировать .pdf
файл, DesktopDemo возвращает следующее сообщение: Cannot perform the given operation to the <file name> file
Следующие фрагменты кода обеспечивают больше деталей о реализации приложения DeskDemo. Конструктор DesktopDemo отключает немного компонентов прямо после инстанцирования UI и проверяет, доступен ли Настольный API.
public DesktopDemo() { // init all gui components initComponents(); // disable buttons that launch browser, email client, // disable buttons that open, edit, print files disableActions(); // before any Desktop APIs are used, first check whether the API is // supported by this particular VM on this particular host if (Desktop.isDesktopSupported()) { desktop = Desktop.getDesktop(); // now enable buttons for actions that are supported. enableSupportedActions(); } ... /** * Disable all graphical components until we know * whether their functionality is supported. */ private void disableActions() { txtBrowserURI.setEnabled(false); btnLaunchBrowser.setEnabled(false); txtMailTo.setEnabled(false); btnLaunchEmail.setEnabled(false); rbEdit.setEnabled(false); rbOpen.setEnabled(false); rbPrint.setEnabled(false); txtFile.setEnabled(false); btnLaunchApplication.setEnabled(false); } ...
Как только Объект рабочего стола получается, можно запросить объект узнать, какие определенные действия поддерживаются. Если Объект рабочего стола не поддерживает определенные действия, или если сам настольный API неподдерживается, DesktopDemo просто сохраняет графические компоненты, на которые влияют, отключенными.
/** * Enable actions that are supported on this host. * The actions are the following: open browser, * open email client, and open, edit, and print * files using their associated application. */ private void enableSupportedActions() { if (desktop.isSupported(Desktop.Action.BROWSE)) { txtBrowserURI.setEnabled(true); btnLaunchBrowser.setEnabled(true); } if (desktop.isSupported(Desktop.Action.MAIL)) { txtMailTo.setEnabled(true); btnLaunchEmail.setEnabled(true); } if (desktop.isSupported(Desktop.Action.OPEN)) { rbOpen.setEnabled(true); } if (desktop.isSupported(Desktop.Action.EDIT)) { rbEdit.setEnabled(true); } if (desktop.isSupported(Desktop.Action.PRINT)) { rbPrint.setEnabled(true); } if (rbEdit.isEnabled() || rbOpen.isEnabled() || rbPrint.isEnabled()) { txtFile.setEnabled(true); btnLaunchApplication.setEnabled(true); } }
browse(uri)
метод может бросить множество исключений, включая NullPointerException, если URI является нулем, и UnsupportedOperationException, если действие ОБЗОРА неподдерживается. Этот метод может бросить IOException, если браузер значения по умолчанию или приложение не могут быть найдены или запущены, и SecurityException, если менеджер безопасности отрицает вызов.
private void onLaunchBrowser(ActionEvent evt) { URI uri = null; try { uri = new URI(txtBrowserURI.getText()); desktop.browse(uri); } catch(IOException ioe) { System.out.println("The system cannot find the " + uri + " file specified"); //ioe.printStackTrace(); } catch(URISyntaxException use) { System.out.println("Illegal character in path"); //use.printStackTrace(); } }
Приложения могут запустить почтовый клиент значения по умолчанию узла, если то действие поддерживается, вызывая mail(uriMailTo)
метод этого Настольного экземпляра.
private void onLaunchMail(ActionEvent evt) { String mailTo = txtMailTo.getText(); URI uriMailTo = null; try { if (mailTo.length() > 0) { uriMailTo = new URI("mailto", mailTo, null); desktop.mail(uriMailTo); } else { desktop.mail(); } } catch(IOException ioe) { ioe.printStackTrace(); } catch(URISyntaxException use) { use.printStackTrace(); } }
Приложения Java могут открыть, отредактировать, и напечатать файлы из своего связанного приложения, используя open()
, edit()
, и print()
методы Desktop
class, соответственно.
private void onLaunchDefaultApplication(ActionEvent evt) { String fileName = txtFile.getText(); File file = new File(fileName); try { switch(action) { case OPEN: desktop.open(file); break; case EDIT: desktop.edit(file); break; case PRINT: desktop.print(file); break; } } catch (IOException ioe) { //ioe.printStackTrace(); System.out.println("Cannot perform the given operation to the " + file + " file"); } }
Полный код для этого демонстрационного примера доступен в DesktopDemo.java
файл.
Desktop
class позволяет приложениям Java запускать собственные настольные приложения, которые обрабатывают URI или файлы.
Метод | Цель |
---|---|
|
Тесты, поддерживается ли этот class на текущей платформе. Если это поддерживается, использовать getDesktop() получать экземпляр. |
|
Возвраты Desktop экземпляр текущего контекста браузера. На некоторых платформах не может поддерживаться Настольный API. Используйте isDesktopSupported() метод, чтобы определить, поддерживается ли текущий рабочий стол. |
|
Тесты, поддерживается ли действие на текущей платформе. Используйте следующий constans Desktop.Action перечисление: BROWSE , EDIT , MAIL , OPEN , PRINT . |
|
Запускает браузер значения по умолчанию, чтобы вывести на экран URI. Если браузер значения по умолчанию не в состоянии обработать указанный URI, приложение, зарегистрированное для того, чтобы обработать URI указанного типа, вызывается. Приложение определяется из протокола и пути URI, как определено URI class. |
|
Запускает почтовое окно создания пользовательского почтового клиента значения по умолчанию, заполняя поля сообщения, определенные a mailto: URI . |
|
Запускает связанное приложение, чтобы открыть файл. |
|
Запускает связанное приложение редактора и открывает файл для того, чтобы отредактировать. |
|
Печатает файл с собственным настольным средством печати, используя команду печати связанного приложения. |
Следующая таблица приводит пример, который использует Рабочий стол интеграция class.
Пример | Где Описано | Примечания |
---|---|---|
DesktopDemo |
Этот раздел | Запускает браузер значения по умолчанию хост-системы с указанным URI и почтовым клиентом значения по умолчанию; запускает приложение, чтобы открыть, отредактировать, или напечатать файл. |