#java #macos
#java #macos
Вопрос:
Пожалуйста, дайте мне знать, как запустить / вызвать приложение .dmg на Java. Я использовал приведенный ниже синтаксис Runtime.getruntime.exec("sample.dmg")
, но он выдает ошибку как «отказано в разрешении» с кодом ошибки 13. Пожалуйста, дайте мне знать, как вызвать dmg.
Комментарии:
1. Вы запускали это в апплете или иным образом с ограниченными разрешениями?
Ответ №1:
Файл DMG не является непосредственно исполняемым. Вам нужно использовать команду Mac OSX open:
Runtime.getRuntime().exec(new String[] { "/usr/bin/open", "sample.dmg" });
Возможно, вам потребуется указать полный путь к файлу dmg, но в остальном, похоже, у меня все работает нормально. Открыть также позволяет указать приложение для открытия, чтобы вы могли делать интересные вещи, такие как отправка этого документа в почтовом приложении в качестве вложения:
Runtime.getRuntime().exec(
new String[] { "/usr/bin/open", "-a", "Mail", "letter.pdf" });
Я постоянно использую команду open from Mac, подобную этой.
Ответ №2:
Вы должны использовать Desktop.open(File file)
, который будет использовать соответствующий открыватель для ОС. В вашем случае на Mac он будет использовать open
. Это лучше Runtime.exec
, чем если бы вы не полагались на точное местоположение open
команды. Кроме того, это будет работать даже в Windows, если у нее есть приложение для монтирования DMG, такое как MacDrive от Mediafour.
Суть Desktop.open(File file)
в том, что используется для открытия файла с помощью открывателя операционной системы по умолчанию, для этого он и существует. Большинство людей используют только Runtime.exec
в крайнем случае.
Комментарии:
1. но вопрос конкретно касается OS X и .dmg . Также OS X гарантирует, что команда open должна находиться в этом месте, точно так же, как Un x-подобные ОС гарантируют, что выполнение *kill -9 означает insta-kill и возврат всех ресурсов, используемых приложением.
2. @CedricMartin: Значит, он должен использовать менее удобный и надежный вариант только потому, что в его случае он не сломается?
3. @Inerdia: не заставляй меня говорить то, чего я не говорил. Я сказал, что как OS X, так и Un x предоставляют гарантии (в отличие от определенной ОС). Когда вы гарантированно найдете *open в /usr/bin/open/ и когда весь смысл вопроса заключается в том, чтобы открыть .dmg ( .dmg является концепцией, совершенно чуждой Windows), тогда это не просто бесполезно и бессмысленно, но и вводит в заблуждение, чтобы заставить поверить, что «не найтикоманды «открыть » и «в случае, если он не на Mac» являются хорошим оправданием для использования Desktop.open . Desktop.open — это нормально. Не оправдывайте это, делая вид, что OP хочет открыть .dmg в Windows.
4. @CedricMartin, я не верю, что ОС дает какие-либо гарантии относительно местоположения
open
илиkill
. Да, он поставляется с ним в хорошо известных местах, но никто не мешает кому-либо перемещать его, переименовывая файлы.5. @SteveKuo: и, следовательно, ломает многие утилиты… Кстати, что касается kill , я говорил о гарантии того, что «kill -9» завершает работу приложения мгновенно, без вопросов и освобождает ресурсы, используемые приложением.