用Java编写的自定义Web浏览器不起作用:渲染和链接不起作用

时间:2013-06-16 12:53:30

标签: java html java-ee

我正在制作一个简单的Java Web浏览器,它确实从URL加载网页,但不知何故它们似乎都不正确:

enter image description here

页面上的加号按钮和链接不起作用。我认为这是关于HTML或JS的。我正在使用Eclipse,如果它对你有用的话。 我错过了什么?

My code

代码:

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
public class WebBrowser
{
     public static void main(String [] args)
     {
          JFrame frame = new EditorPaneFrame();
          frame.show();
     }
}
class EditorPaneFrame extends JFrame
{
     private JTextField url;
     private JCheckBox editable;
     private JButton Carica;
     private JButton Indietro;
     private JEditorPane editorPane;
     private Stack urlStack = new Stack();
     public EditorPaneFrame()
     {
          setTitle("Java Web Browser");
          setSize(600,400);
          setLocationRelativeTo(null);
          setVisible(true);
          // set up text field and load button for typing in URL
          String protocollo = new String ("http://");
          url = new JTextField(protocollo,30);
          Carica = new JButton("Load");
          Carica.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent event)
               {
                    try
                    {
                         // remember URL for back button
                         urlStack.push(url.getText());
                         editorPane.setPage(url.getText());
                    }
                    catch(Exception e)
                    {
                         editorPane.setText("Error: " +e);
                    }
               }
          });
          // set up back button and button action
          Indietro = new JButton("Back");
          Indietro.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent event)
               {
                    if(urlStack.size()<=1) return;
                    try
                    {
                         urlStack.pop();
                         String urlString = (String)urlStack.peek();
                         url.setText(urlString);
                         editorPane.setPage(urlString);
                    }
                    catch(IOException e)
                    {
                         editorPane.setText("Error : " +e);
                    }
               }
          });
          editorPane = new JEditorPane();
          editorPane.setEditable(false);
          editorPane.addHyperlinkListener(new HyperlinkListener()
          {
               public void hyperlinkUpdate(HyperlinkEvent event)
               {
                    if(event.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
                    {
                         try
                         {
                              urlStack.push(event.getURL().toString());
                              url.setText(event.getURL().toString());
                              editorPane.setPage(event.getURL());
                         }
                         catch(IOException e)
                         {
                              editorPane.setText("Error: " + e);
                         }
                    }
               }
          });
          editable = new JCheckBox();
          editable.addActionListener(new ActionListener()
          {
               public void actionPerformed(ActionEvent event)
               {
                    editorPane.setEditable(editable.isSelected());
               }
          });
          Container contentPane = getContentPane();
                        contentPane.add(new JScrollPane(editorPane), "Center");
                        JPanel panel = new JPanel();
                        panel.add(Indietro);
                        panel.add(new JLabel("URL"));
                        panel.add(url);
                        panel.add(Carica);
                        contentPane.add(panel,"North");
     }
}

2 个答案:

答案 0 :(得分:1)

您正在使用JEditorPane,因此javascript和其他scripts无效。 您可以使用内部使用JWebPane的{​​{1}}。

答案 1 :(得分:0)

问题是java用于JEditorPanes中HTML内容的呈现引擎暂时没有更新,因此无法正确呈现页面。根据{{​​3}},只支持HTML 3.2和一组初始CSS,因此JEditorPane不支持HTML 5。

查看以下问题及其答案:

如其他答案中所述,您可以查看Java FX组件或jEditorPane as a web browser等替代方案。