как запустить dmg на mac через java

#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» завершает работу приложения мгновенно, без вопросов и освобождает ресурсы, используемые приложением.