Как перейти по URL Java?

Пользуюсь классом Desktop
try {
          Desktop d=Desktop.getDesktop();

          d.browse(new URI("http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=Моя ссылка"));
    } catch (IOException ioe) {
      ioe.printStackTrace();
    } catch (URISyntaxException use) {
      use.printStackTrace();
    }


Моя ссылка содержит пробелы, как преобразовать строку, чтобы не возникала ошибка
java.net.URISyntaxException: Illegal character in query at index 61: http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=Иван Иванович
	at java.net.URI$Parser.fail(URI.java:2829)
	at java.net.URI$Parser.checkChars(URI.java:3002)
	at java.net.URI$Parser.parseHierarchical(URI.java:3092)
	at java.net.URI$Parser.parse(URI.java:3034)
	at java.net.URI.<init>(URI.java:595)
	at NewJFrame.jButton4ActionPerformed(NewJFrame.java:281)
	at NewJFrame.access$500(NewJFrame.java:5)
	at NewJFrame$6.actionPerformed(NewJFrame.java:91)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:708)
	at java.awt.EventQueue$4.run(EventQueue.java:706)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
  • Вопрос задан
  • 6773 просмотра
Решения вопроса 1
tencet
@tencet Автор вопроса
Все пробелы нужно заменить на '+'
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
nowm
@nowm
Можно воспользоваться методом encode класса URLEncoder. Только нужно не всю строку с адресом перегонять через encode, а только GET-переменные. Можно так сделать:

try {
    Desktop d=Desktop.getDesktop();

    d.browse(new URI(
        String.format( 
            "http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=%s", 
            URLEncoder.encode( "запрос с кучей пробелов" , "UTF8" )
        )
    ));
} catch (IOException ioe) {
    ioe.printStackTrace();
} catch (URISyntaxException use) {
    use.printStackTrace();
}
Ответ написан
tencet
@tencet Автор вопроса
С ссылкой содержащей русские символы без пробелов не возникает проблем.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы