То, чего не хватало - Компоненти інтеграції JDesktop

Якщо ви вже встигли побувати Java-розробником, то, напевно, вам доводилося чути багато з приводу того, що Java не може всього, що під силу C і C++. Ви також, можливо, боролися з компонентом HTMLEditor, в той час як Windows-розробники без особливих проблем встоювали у свої програми Internet Explorer за допомогою лише кількох рядків коду. Всі, дочекалися, тепер і ми можемо все це і не тільки.

JDesktop Integration Components, JDIC- це всеосяжний проект, що складається з набору модулів, що дозволяє Java-розробникам отримати доступ до системних сервісів за допомогою платформо-незалежного API. Цей проект було започатковано групою дослідників Desktop із Sun, щоб надати більш якісну інтеграцію програм із програмними desktop-платформами, на яких вони працюють. Нещодавно вони розмістили цей проект з відкритим вихідним кодом для того, щоб прискорити і покращити зворотний зв'язок з розробниками.

JDIC розбитий на 5 компонентів:

  • Desktop: Завантажувач різних програм для відкриття, редагування, друку та надсилання файлів поштою.
  • Filetypes: Встановлює прив'язку типів файлів до програм, які слід використовувати для відкриття файлів цього типу.
  • Browser: Дозволяє вбудовувати "рідний" (native) веб-браузер (Internet Explorer або Mozilla) у будь-який AWT-канвас.
  • Packager: Інструмент для конвертування Java Web Start-програм у “рідний” інсталяційний виконуваний файл.
  • Tray API: Підтримка іконок системного трею та спливаючих меню.
  • SaverBeans(як окремий під-проект): Системний скрінсейвер засобами Java. (У цій статті розглядатися не буде)

Компонент Desktop

Пакетorg.jdesktop.jdic.desktopміститьвсього лише три класи:Desktop,MessageтаDesktopException. КласDesktopстатичний, і ви не можете створювати його екземпляри. Він має методи для відкриття, редагування та друку файлів. Ви також можете відкрити нове email-повідомлення та заповнити його потрібним текстом. Для цього служить класMessage, за його допомогою ви можете встановити одержувача, задати текст повідомлення, прикріпити до листа вкладені файли та визначити інші частини email-повідомлення.

Найкраще, що є у компонентіDesktop- це те, наскільки просто ним користуватися. Вам зовсім не потрібно реєструвати будь-які спеціальні драйвери або змінювати конфігурацію для конкретної платформи. Всі ці операції вже зроблено за вас. Якщо у вашомуCLASSPATHє архівjdic.jarта відповідніnative-бібліотеки знаходяться в папці для завантаження системних бібліотек (зазвичайnative-бібліотеки розміщуються в одній папці з файломjdic.jar), то все буде працювати без проблем на всіх платформах, для яких у вас є native-бібліотеки. Ось приклад того, як можна запустити веб-браузер одним рядком:

Компонент Filetypes

Наступний ключовий компонент проектуJDIC– це пакетFiletypes, який дозволяє встановлювати асоціації між типами файлів та програмами, які система використовуватиме для відкриття цих файлів. Це означає, що ви можете сказати своїй операційній системі, яку програму використовувати для файлів. Наприклад, зробити так, щоб відкривати текстові файли програмоюMicrosoft Wordзамість стандартногоNotepad. За допомогою цього API ви можете запитувати інформацію, встановлювати та видаляти асоціації між програмами, розширеннями файлів та/абоMIME-типами.

Подібне завдання асоціацій типів файлів – досить специфічна для операційної системи функція. Цей API найбільш корисний для отримання інформації про вже встановлені асоціації або реєстрацію самої програми, ніж перереєстрації вже встановлених асоціацій у системі. Наприклад, звичайні текстові файли вWindowsзав'язані на файлnotepad.exe, який знаходиться в самій знаєте якій папці. УGnome(GNU/Linux), можливо, буде зв'язок із програмою/usr/local/bin/gedit. Тому, оскільки шляхи та імена файлів занадто залежать від платформи, установка асоціацій буде незручна і корисна, тільки в тому випадку, коли ви не зав'язуєте тип файлу зі своїм Java-додатком, шлях до якого дуже просто отримати під будь-якою платформою. Загалом, не важливо, як ви збираєтеся використовувати цей компонент, головне, що він виконує досить багато брудної роботи за вас, працюючи з реєстром і базою данихMIME-типів. Нижче наведено простий приклад встановлення асоціації:

Перші два рядки методу main створюють об'єкт класуAction, за допомогою якого відкриватиметься файл (представлений у вигляді %1) за допомогою програмиnotepad.exe. Наступні чотири рядки створюють асоціацію між цим об'єктом та файлами з розширенням“.mylog”. ВстановлюватиMIME-тип не обов'язково. Просто останнім часом вони дуже широко використовуються, тому це хороший стиль, для кожного типу файлу створюватиMIME-тип. Останні два рядки фактично реєструють створену асоціацію у системі. Як і у випадку з усім, що стосуєтьсяJDIC API, якщо у вас єnative-біблотеки і вони розташовані в правильній папці (разом зjdic.jar) , то немає необхідності робити щось ще. Код працюватиме.

Компонент Browser

Третій компонент проектуJDIC- цеBrowser. На відміну від попередніх двох, які дозволяють отримати доступ до системних сервісів, цей компонент формує для вас справжнійAWT-віджет для використання в графічних додатках. Раніше ви могли використовувати інструменти, що вбудовуються, від третіх виробників або всі нечисленніJava-браузери. Але тепер за допомогоюJDICта компонента Browser ви маєте можливість вбудовувати у ваші програми веб-браузер, який користувач використовує за замовчуванням. Такий варіант використання веб браузера у ваших програмах відкриває двері для безлічі можливостей. Наприклад, з використанням повнофункціонального браузера стає можливим писати відмінніRSS-клієнти для читання новин. Крім цього, розмір дистрибутива вашої програми не буде занадто великим, оскільки вам не потрібно включати сам веб браузер.

Browser APIтакож дає вам доступ до деяких подій веб браузера і роботі з історією сторінок, що відкриваються (тобто вперед, назад, оновити). Майбутні версії цього API планують значно розширити тіснішу інтеграцію з основними функціями браузера, а також із документами, що завантажуються ним. Приклад використання веб-браузера у програмі:

інтеграції
AWT-компонент - WebBrowser

  1. ніколи не перекривайтеSwing- таAWT-компоненти.
  2. викликайте методsetLightWeightPopupEnabled(false)ваших меню або інакше вони будуть зникати поряд із компонентом браузера.

Для більш детальної інформації про спільне використанняAWTтаSwingви можете прочитати англомовну статтюSwing Connectionтут: http://java.sun.com/products/jfc /tsc/articles/mixing/

У нашому прикладі, за допомогоюJDIC, ми використовуємо браузер вибраний за замовчуванням користувачем, зазвичай це абоInternet Explorer, абоMozilla. При цьому вам зовсім не потрібно упаковувати частиниMozillaразом зі своїм додатком, як вам потрібно було б, якби ви використовувалиJRex(http://jrex.mozilla.org/). Такий підхід, тобто. з використаннямJDIC, ідеально підходить для операційних систем сімействаWindows, оскільки на них гарантовано присутнійInternet Explorer. Однак зLinuxможуть виникнути проблеми, де браузером за замовчуванням може бути неMozilla, аKonquorerуKDE, наприклад. Ймовірно, все буде значно краще в більш зрілих релізах проектуJDIC, але незважаючи ні на що, на даний момент можливості компонентаBrowserнададуть неоціненну допомогу багатьом проектам та додаткам.

Компонент Packager

На відміну від решти проектуJDIC, компонентPackager– це неAPI.Packager– це набір інструментів командного рядка, який дозволяє конвертуватиJNLP-програми (Java Web Start, http://java.sun.com/products/javawebstart /) в "рідні" інсталятори. (rpmдляGNU/Linux,pkgдляSolarisтаmsiдляWindows). Це не означає, що ви отримаєте файли вашої програми (на зразок .exe), як це роблятьJSmooth(http://jsmooth.sourceforge.net/) іJExePack(http http://www.duckware.com/jexepack/index.html). Ви просто отримуєте інсталятор для вашогоJava Web Start-додатку. Після того як програма встановилася, вона оновить себе через Інтернет за допомогоюJNLP-дескриптора і виконає всі необхідні операції, які виконують будь-якийWeb Start-додаток.

КомпонентPackagerвимагаєJ2SE 5.0таnative-інструменти. ДляWindowsвам також потрібно встановитиMSI SDKвідMicrosoft. Як тільки ви налаштуєте середовище, ви можете приступати до використання інструментівjnlp2msi,jnlp2rpmтаjnlp2pkg, щоб конвертувати вашWeb Start-додаток у специфічний для конкретної платформи інсталятор.

Компонент Tray

Tray APIдеякий час був інкубаційним проектом, але завдяки завзятості спільноти веб-сайту java.net він став більш зрілим і на даний момент носить звання повноправного компонента проектуJDIC. Він призначений для створення невеликих іконок вищої програми в правому нижньому кутку екрану. Передбачається, що операційна система підтримує ідею системного трею. На практиці це означає, що у вас має стояти операційна системаWindowsабоGNU/Linux. КористувачамMacOS Xне пощастило. Цей компонент окрім просто іконок підтримує меню, що підходять, і автоматичніtooltip-написи для іконок. Як і решта в проектіJDIC, для цього компонента вам потрібно матиnative-бібліотеки для кожної з операційних систем, на яких ви припускаєте, що запускатиметься ваша програма.

Оскільки за обсягом цей API досить малий, він містить лише два класи:SystemTrayтаTrayIcon. КласSystemTrayмістить статичний метод-фабрику для доступу до системного трею. КласTrayIconдозволяє встановитиJPopupMenuтаIconоб'єкти на наступне вільне місце в системному треї. І на завершення викликається методSystemTray.getDefaultSystemTray().addTrayIcon(). Давайте розглянемо простий приклад:

Ось що маємо у результаті. Значок має форму жовтої плями.

компоненти
Компонент Tray

Як видно з вихідного коду прикладу, спочатку ми отримуємо об'єкт системного трею. Після цього на початку конструктора ми створюємо спливаюче менюJMenuPopupз трьома елементами і одні роздільником. На останній елементquitми вішаємо слухач подійActionListener, щоб можна було вийти. Тепер замість додавання створеного нами меню в рядок меню або об'єктJComponent, ми передаємо його конструкторуTrayIcon.ImageIcon, який відіграє роль іконки для системного трею, також передається конструкторуTrayIconразом із текстомtooltip'ом. На завершення ми додаємо наш об'єктTrayIconдоSystemTray. Скомпілюйте цей приклад із файломtray.jarу>).

Tray APIтакож підтримує анімованіGIF-іконки та можливість обробки лівого клацання миші. За допомогою цього API ви можете приховувати свою програму з панелі завдань у трей та назад.

Інкубаційні проекти

З самого початку проектJDICмав на меті всіляко заохочувати та розробляти нові API. Щоб сприяти зростанню, вони відкрили так званий проект-інкубатор, куди розробники можуть викладати свій код і випробовувати різні цікаві ідеї. Якщо їхні ідеї досить хороші і реалізовані гідно, такий інкубаційний проект може стати частиноюJDICабо навіть стати окремим повноцінним проектом.

Враховуючи той факт, що на даний момент проект JDIC знаходиться в стадії бета-версії, можна сказати що він подає дуже великі надії.JDICпостійно зростає і змінюється. На даний момент йде робота над виправленням помилок, покращенням підтримкиMacта спробами мігрувати деякі частиниJDICдо рідноїJavaruntime-середа.

Попередження: mysql_connect() [function.mysql-connect]: неможливо підключитися до локального сервера MySQL через сокет '/tmp/mysql.sock' (2) у/pub/ home/javaport/javaportal/books/show2b.phpу рядку11

Попередження: mysql_db_query() [function.mysql-db-query]: неможливо підключитися до локального сервера MySQL через сокет '/tmp/mysql.sock' (2) у/pub/home /javaport/javaportal/books/show2b.phpу рядку19

Попередження: mysql_db_query() [function.mysql-db-query]: не вдалося встановити посилання на сервер у/pub/home/javaport/javaportal/books/show2b.phpу рядку19

Попередження: mysql_fetch_array(): наданий аргумент не є дійсним ресурсом результатів MySQL у/pub/home/javaport/javaportal/books/show2b.phpу рядку30Узнай о чем ты на самом деле сейчас думаешь тут.

[сталася помилка під час обробки цієї директиви]

Попередження: mysql_connect() [function.mysql-connect]: неможливо підключитися до локального сервера MySQL через сокет '/tmp/mysql.sock' (2) у/pub/ home/javaport/javaportal/news/worldnews.phpна лінії91