Открытие файла с приложением по умолчанию и перевод этого приложения на передний план - PullRequest
1 голос
/ 16 июня 2020

Как вывести на передний план приложение по умолчанию для расширения файла после открытия указанного файла? программа по умолчанию, назначенная расширению файла. Эти файлы включают видео, аудиофайлы, а также файлы 3D-моделей. Можно ожидать, что на компьютерах пользователей установлено программное обеспечение для открытия таких файлов, однако неизвестно, какое это будет программное обеспечение, например, некоторые могут открывать файлы STL с помощью программы просмотра по умолчанию, предоставляемой Win10, некоторые могут открывать их с помощью Blender и т. д. Более широкий контекст - предоставить пользователям полезные ресурсы и предоставить доступ к этим ресурсам непосредственно из приложения. Проблема Реализация этой функции прошла хорошо. Пользователям предоставляются компоненты пользовательского интерфейса, показывающие им списки доступных ресурсов. Затем они выбирают ресурс, и этот ресурс открывается. Если приложение по умолчанию для соответствующего расширения файла не было открыто до этого момента, оно откроется и будет переведено на передний план с помощью Windows. Однако, если он уже был открыт, он останется в фоновом режиме, и пользователи могут не заметить, что что-то произошло из-за этого факта. Пример: Пользователи выбирают файл .mp4 в приложении Java. Открытие файла с использованием значения по умолчанию Windows для расширения файла .mp4 запускается приложением Java Это программа по умолчанию, VL C, которая была ранее закрытый, теперь открывается и выводится на передний план Windows Пользователь смотрит видео и хочет посмотреть другое Для этого приложение Java снова разворачивается и пользователь щелкает другой выбор .mp4 в Java Swing UI Видео сразу же начинает воспроизводиться в VL C. Однако VL C оставался открытым и, таким образом, больше не выводился на передний план Windows -> Пользователь не видит никакого эффекта и может ожидать, что что-то сломалось. Что я пробовал? Прежде всего, я попытался открыть файл, используя объект Desktop, а также через Runtime: Desktop.getDesktop().open( file ); vs. Runtime.getRuntime().exec( "cmd /c start " + file ); Оба они показали одинаковое поведение в отношении приоритета окна. Другая идея заключалась в переводе приложения Java в фоновый режим при открытии ресурса. Были опробованы описанные здесь подходы: Как получить контейнер верхнего уровня JComponent? SwingUtilities.windowForComponent( panel ); и Container c = toolbar; while ( c.getParent() != null ) { c = c.getParent(); } if ( c instanceof JFrame ) { //... } Но это тоже невозможно. Во-первых, родительский элемент - это объект, наследующий от JDialog, а не от JFrame, и, во-вторых, приложение Java находится в состоянии, в котором функция Windows "минимизировать" недоступна - ее можно только закрыть или сохраняется как есть. Только если диалоговое окно должно быть закрыто, это разблокирует минимизацию. Возможно, пользовательский интерфейс может быть переработан, чтобы учесть это, но этот подход также не кажется красивым . Пользователи могут не захотеть сворачивать приложение Java, и, кроме того, другое приложение может по-прежнему находиться перед приложением по умолчанию для расширения файла, который нужно открыть. Наконец, я думал о реализации контейнеров для всех этих форматов файлов в приложении Java и отображение их в JFrame. Это тоже нежизнеспособно. Мало того, что усилия резко возрастают при попытке реализовать настраиваемую программу просмотра для всех возможных форматов файлов ресурсов, но, кроме того, наши пользователи, вероятно, будут использовать специализированное программное обеспечение для определенных расширений c, и они захотят просматривать эти ресурсы в этом программном обеспечении, скорее чем в программе просмотра нашего Java приложения. Хотя проблема, связанная с тем, что приложение по умолчанию для расширения файла остается в фоновом режиме, довольно незначительна, она все еще меня раздражает. Можно как-то решить эту проблему? Возможно, выяснив, что установлено в качестве приложения по умолчанию для расширения файла, а затем попытаемся максимизировать его? Есть ли подходы лучше?

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