«Секретный соус» в частных API для MacOS X для Java - запрос дополнительной информации - PullRequest
2 голосов
/ 05 января 2011

В своем блоге Скотт Ковач пишет:

Не вдаваясь в подробности, ввод «java MyAWTCode» из окна терминала нарушает множество предположений о том, что представляет собой приложение в Mac OS X, и для сортировки требуется много сотрудничества между AWT и Process Manager. это из. http://skovatch.wordpress.com/2011/01/03/secret-smoke-screens/

Из любопытства - какие предположения нарушаются? Конечно, это просто кандидат на вызов API с обратными вызовами?

Ответы [ 2 ]

2 голосов
/ 05 февраля 2011

Конечно, я могу подробнее остановиться на этом.

Диспетчер процессов начинается с предположения, что все приложения, которые представляют пользовательский интерфейс в Mac OS X, упакованы в папку с именем Application.app,Двоичный файл в Contents / MacOS / Application, и, самое главное, имеет Info.plist для получения таких вещей, как имя приложения, которое будет отображаться в меню приложения.Когда вы запускаете приложение Java из командной строки (Swing или SWT), Info.plist не существует, поэтому нам пришлось создать CFDictionary для передачи частному SPI, который бы регистрировал приложение, присвоив ему правильное имя вDock - в отличие от просто 'java' - и может быть принудительно завершен.

Даже в этом случае он не идеален, поскольку Dock также предполагает, что он может сохранять псевдоним для связанного приложения, когда вынажмите и выберите Keep In Dock, но так как нет ни одной, которая не работает без уведомления.Нет способа сохранить ярлык или командную строку для запуска приложения, как это может сделать Windows.

SWT просто вызывает TransformProcessType, который является началом, но его далеко не достаточно, чтобы превратить приложение Java в полноценное приложение пользовательского интерфейса.Для проведения чистого тестирования и разработки SWT достаточно, чтобы вы начали.Когда вы создаете приложение на основе Eclipse RCP для развертывания, вы получаете комплексное приложение с панелью запуска Eclipse, плагинами и функциями, и вы готовы к работе.

Конечно, если вы пойдете на дополнительныеи упаковывать ваше Java-приложение в пакет, это все спорный вопрос, но подавляющее большинство разработчиков с других платформ не беспокоятся и просто хотят запустить исполняемый файл JAR или даже папку файлов классов со сценарием оболочки.

1 голос
/ 05 января 2011

Я не уверен, что он имел в виду, но я предполагаю, что большая разница заключается в файловой структуре: обычное приложение MacOS X - это пакет со структурой NameOfTheApp.app/Contents/MacOS/NameOfTheApp и конкретные файлыСодержание каталога.Когда мы используем терминал с командой «java», JVM должна создать «виртуальное» приложение, специфичное для кода Java, и обработать все события MacOS для него.Кроме того, когда вы дважды открываете приложение в Finder, оно просто активирует приложение во второй раз, при этом вам необходимо запускать отдельные приложения каждый раз, когда вы используете «java MyAWTCode».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...