это кроссплатформенное решение или только Windows? другие ответы в этой теме предлагают использовать класс Runtime для Linux
isapir
@lgal, у меня это сработало как на Windows 7, так и на Linux (Ubuntu 10.10). Он всегда открывает системный браузер по умолчанию (IE в Win7 и Firefox в Ubuntu, в моем случае)
Хоаким Оливейра
1
У меня это не работает. Метод IsDesktopSupported всегда возвращает false на моем компьютере с Windows. Что случилось?
krzysiek.ste 02
2
Если пользователь назначил настраиваемое действие «открыть с помощью» для расширения файла, такого как «html», тогда это НЕ откроет браузер, а программу, с которой пользователь связал его .... Это вообще не решение!
thesaint
4
@ krzysiek.ste используйте Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)вместо этого чек.
Thibstars,
35
Вот мой код. Он откроет указанный URL-адрес в браузере по умолчанию (кроссплатформенное решение).
Runtime rt =Runtime.getRuntime();String url ="http://stackoverflow.com";String[] browsers ={"epiphany","firefox","mozilla","konqueror","netscape","opera","links","lynx"};StringBuffer cmd =newStringBuffer();for(int i =0; i < browsers.length; i++)if(i ==0)
cmd.append(String.format("%s \"%s\"", browsers[i], url));else
cmd.append(String.format(" || %s \"%s\"", browsers[i], url));// If the first didn't work, try the next browser and so on
rt.exec(newString[]{"sh","-c", cmd.toString()});
Если вы хотите иметь мультиплатформенное приложение, вам нужно добавить проверку операционной системы (например):
String os =System.getProperty("os.name").toLowerCase();
Перечислять все браузеры в решении для Linux очень плохо. Что делать, если вы используете другой браузер, чем любой из списка? (в списке нет хрома или хрома) Или есть и Epiphany, и Firefox, но предпочитает последний? xdg-openВ этом случае использование намного лучше. Таким образом, решение может быть таким же простым, как и решение для macOS.
m4tx
Другой вариант для Windows - rt.exec ("start \" "+ url +" \ ");
Иван Никитин
6
Вы также можете использовать среду выполнения для создания кроссплатформенного решения:
Как отмечено в ответе, предоставленном Тимом Купером, java.awt.Desktopэта возможность предоставляется с версии Java 6 (1.6), но со следующей оговоркой:
Для платформ, которые не поддерживают или не предоставляют java.awt.Desktop, изучите проект BrowserLauncher2 . Он получен и несколько обновлен из BrowserLauncher классом первоначально написанным и выпущенным Эриком Альбертом. Я успешно использовал исходный класс BrowserLauncher в многоплатформенном Java-приложении, которое в начале 2000-х работало локально с интерфейсом веб-браузера.
Обратите внимание, что BrowserLauncher2 находится под лицензией GNU Lesser General Public License . Если эта лицензия неприемлема, поищите копию оригинального BrowserLauncher с очень либеральной лицензией:
Авторские права на этот код принадлежат Эрику Альберту (ejalbert@cs.stanford.edu), 1999-2001 гг., И его можно распространять или изменять в любой форме без ограничений при условии, что часть этого комментария от этого абзаца до конца комментария не будет удалена. . Автор просит уведомлять его о любых приложениях, апплетах или других двоичных файлах, которые используют этот код, но это больше из любопытства, чем что-либо еще и не требуется. На это программное обеспечение не распространяется гарантия. Автор не несет ответственности за потерю данных или функциональности, а также за любые неблагоприятные или неожиданные последствия использования этого программного обеспечения.
Источники: Стивен Спенсер, журнал JavaWorld (Java Tip 66). Также спасибо Рону Б. Йе, Эрику Шапиро, Бену Энгберу, Полу Тейтлебауму, Андреа Кантаторе, Ларри Баровски, Тревору Бедзеку, Фрэнку Мидриху и Рону Рабакукку.
Проекты, отличные от BrowserLauncher2, также могли обновлять исходный BrowserLauncher для учета изменений в настройках безопасности браузера и системы по умолчанию с 2001 года.
Для тех, кто хочет использовать BrowserLauncher2 на Mac, ни оригинальный BrowserLauncher2, ни вилка, упомянутая @koppor, не работают с Mac OS X Sierra. Оба предполагают наличие системного свойства "mrj.version", которое, по-видимому, больше не существует. Код вызовет исключение NullPointerException при создании средства запуска. См. Sourceforge.net/p/browserlaunch2/bugs/14 для получения дополнительной информации.
Coren
4
Это очень просто, просто напишите ниже код:
String s ="http://www.google.com";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
или если вы не хотите загружать URL-адрес, просто введите имя браузера в строковые значения, например,
String s ="chrome";Desktop desktop =Desktop.getDesktop();
desktop.browse(URI.create(s));
он автоматически откроет браузер с пустым URL-адресом после выполнения программы
Надеюсь, вы не против, но я собрал все полезные вещи сверху и создал полный класс, готовый для тестирования ...
import java.awt.Desktop;import java.io.IOException;import java.net.URI;import java.net.URISyntaxException;publicclassMultiBrowPop{publicstaticvoid main(String[] args){
OUT("\nWelcome to Multi Brow Pop.\nThis aims to popup a browsers in multiple operating systems.\nGood luck!\n");String url ="http://www.birdfolk.co.uk/cricmob";
OUT("We're going to this page: "+ url);String myOS =System.getProperty("os.name").toLowerCase();
OUT("(Your operating system is: "+ myOS +")\n");try{if(Desktop.isDesktopSupported()){// Probably Windows
OUT(" -- Going with Desktop.browse ...");Desktop desktop =Desktop.getDesktop();
desktop.browse(new URI(url));}else{// Definitely Non-windowsRuntime runtime =Runtime.getRuntime();if(myOS.contains("mac")){// Apples
OUT(" -- Going on Apple with 'open'...");
runtime.exec("open "+ url);}elseif(myOS.contains("nix")|| myOS.contains("nux")){// Linux flavours
OUT(" -- Going on Linux with 'xdg-open'...");
runtime.exec("xdg-open "+ url);}else
OUT("I was unable/unwilling to launch a browser in your OS :( #SadFace");}
OUT("\nThings have finished.\nI hope you're OK.");}catch(IOException|URISyntaxException eek){
OUT("**Stuff wrongly: "+ eek.getMessage());}}privatestaticvoid OUT(String str){System.out.println(str);}}
в Windows вызывайте "cmd / k start http://www.example.com ". Фактически, вы всегда можете вызвать программы "по умолчанию", используя команду start. Например, abc.mp3 вызовет mp3-плеер по умолчанию и загрузит запрошенный mp3-файл.
Вы уже разместили портативную версию. Я просто предложил другое решение, которое можно было бы иметь в виду, если бы вам нужно было открывать не только URL-адреса в программах по умолчанию.
d-live
1
Я переделал приведенный выше ответ Браджеша Кумара в Clojure следующим образом:
(defn open-browser
"Open a new browser (window or tab) viewing the document at this `uri`."[uri](if(java.awt.Desktop/isDesktopSupported)(let[desktop (java.awt.Desktop/getDesktop)](.browse desktop (java.net.URI. uri)))(let[rt (java.lang.Runtime/getRuntime)](.exec rt (str "xdg-open " uri)))))
Ответы:
java.awt.Desktop
класс, который вы ищете.источник
Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)
вместо этого чек.Вот мой код. Он откроет указанный URL-адрес в браузере по умолчанию (кроссплатформенное решение).
источник
Для меня решение
Desktop.isDesktopSupported()
не работает ( Windows 7 и ubuntu ). Пожалуйста, попробуйте это, чтобы открыть браузер из Java-кода:Windows:
Mac
Linux:
Если вы хотите иметь мультиплатформенное приложение, вам нужно добавить проверку операционной системы (например):
Windows:
Mac:
Linux:
источник
xdg-open
В этом случае использование намного лучше. Таким образом, решение может быть таким же простым, как и решение для macOS.Вы также можете использовать среду выполнения для создания кроссплатформенного решения:
источник
Как отмечено в ответе, предоставленном Тимом Купером,
java.awt.Desktop
эта возможность предоставляется с версии Java 6 (1.6), но со следующей оговоркой:Для платформ, которые не поддерживают или не предоставляют
java.awt.Desktop
, изучите проект BrowserLauncher2 . Он получен и несколько обновлен из BrowserLauncher классом первоначально написанным и выпущенным Эриком Альбертом. Я успешно использовал исходный класс BrowserLauncher в многоплатформенном Java-приложении, которое в начале 2000-х работало локально с интерфейсом веб-браузера.Обратите внимание, что BrowserLauncher2 находится под лицензией GNU Lesser General Public License . Если эта лицензия неприемлема, поищите копию оригинального BrowserLauncher с очень либеральной лицензией:
Проекты, отличные от BrowserLauncher2, также могли обновлять исходный BrowserLauncher для учета изменений в настройках безопасности браузера и системы по умолчанию с 2001 года.
источник
Это очень просто, просто напишите ниже код:
или если вы не хотите загружать URL-адрес, просто введите имя браузера в строковые значения, например,
он автоматически откроет браузер с пустым URL-адресом после выполнения программы
источник
Надеюсь, вы не против, но я собрал все полезные вещи сверху и создал полный класс, готовый для тестирования ...
источник
в Windows вызывайте "cmd / k start http://www.example.com ". Фактически, вы всегда можете вызвать программы "по умолчанию", используя команду start. Например, abc.mp3 вызовет mp3-плеер по умолчанию и загрузит запрошенный mp3-файл.
источник
Я переделал приведенный выше ответ Браджеша Кумара в Clojure следующим образом:
на случай, если это кому-то пригодится.
источник