JEditorPane не может принимать поисковые запросы Google, почему?

Я создаю очень простой веб-браузер, используя JEditorPane, просто чтобы научиться Swing и GUI на Java, но у меня возникли проблемы с реализацией панели поиска Google, похожей на Firefox.

Я нет, если это связано с ограничением JEditorPane или моим непониманием, но если я попытаюсь взять строку, введенную в панель «Поиск Google», и использовать метод setPage() JEditorPane, это не работает.

Вот мой код для ActionListener кнопки «Поиск в Google»:

public void actionPerformed(ActionEvent arg0) 
{
    try
    {
        content.setPage("http://www.google.com/search?q=" + searchBar.getText());
    }
    catch (IOException e) 
    {
        JOptionPane.showMessageDialog(frame, "Error searching for: " + searchBar.getText());
    }
}

Даже когда я пытаюсь просто выполнить content.setPage("http://www.google.com/search?p=test"); это не работает, значит, это как-то связано с методом setPage() для получения строки URL? Как в нем не нравится "?" или символы "=" или есть другой способ сделать все это вместе?

Спасибо за ваше время,

InfinitiFizz


person Infiniti Fizz    schedule 03.12.2009    source источник


Ответы (4)


JEditorPane — плохой выбор для реализации даже самого простого браузера. Он работает для отображения простых HTML-страниц, но на этом останавливается.

Попробуйте Проект "Летающая тарелка", он работает довольно хорошо (это не полноценный браузер , но достаточно близко). У них есть пример, который на самом деле имитирует веб-браузер.

person adrian.tarau    schedule 03.12.2009
comment
Пожалуйста, посмотрите на комментарий, который я дал ответу jonescb. - person Infiniti Fizz; 03.12.2009

Добавьте что-нибудь, чтобы вывести перехваченное исключение, и вы увидите, что получаете 403 Запрещено в Google.

Есть много Java-ботов, и сайты начали блокировать запросы с «java» в поле User-agent. Google позволит вам получить их домашнюю страницу, но не позволит вам выполнять поиск, если вы не переопределите поле User-agent.

Начните свой jvm с -Dhttp.agent=myappname/1.0, где myappname — это имя вашего приложения.

person Devon_C_Miller    schedule 30.04.2010

Как сказал adrian.tarau, JEditorPane очень плохо отображает современные веб-страницы.
Он даже не поддерживает HTML 4 или Javascript. Я считаю, что Google использует Javascript, чтобы кнопка поиска работала.

Другим предложением будет использование браузера Lobo/движка Cobra.

person jonescb    schedule 03.12.2009
comment
Мне приходится использовать JEditorPane, потому что я не делаю полноценный веб-браузер, это просто для того, чтобы научить меня Swing и графическим интерфейсам. Так что нет, я не могу использовать другие движки Java Browser. Кроме того, как показано выше в моем коде, я не пытаюсь реализовать прослушиватель для кнопки поиска Google, я создал окно поиска JTextField и кнопку поиска JButton, и мне просто интересно, не нравится ли ему ? или = в строке, используемой для поиска Google (потому что, если я удалю ? и =, он попытается перейти на google.com /searchq просто отлично). Спасибо за ваш ответ, но он не отвечает на мой вопрос. - person Infiniti Fizz; 03.12.2009

Если вам нужен полноценный браузер на Java, попробуйте Lobo: http://lobobrowser.org/java-browser.jsp

person voidlogic    schedule 03.12.2009
comment
Пожалуйста, посмотрите на комментарий, который я дал ответу jonescb. - person Infiniti Fizz; 03.12.2009