2) 如果需要你用java编程实现一个浏览器软件,你需要精通哪些技术?

如题所述

GUI图形 网络编程 多线程 IO流 编码 事件处理等

做一个简单的浏览器不需要“精通”的 java swing组件默认有支持HTML解析 所以说HTML你不用管
如果你想做个没有任何样式和特效的浏览器,只要一会时间就可以完成。
难的地方主要是与CSS解析器和JS解析器的融合 CSS、JS解析的数据处理以及做出相应的显示是最难的
只解析HTML的“浏览器”源码,网上给你K来的:
package web.action;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;

@SuppressWarnings("serial")
public class temp extends JFrame {
private JLabel jlAddress, jlInfo;

private JTextField jtfAddress;

private JEditorPane jtpShow;

private JPanel panel;

private JButton btnGO;

private JButton btnBack;

private JButton btnForward;

private JButton btnStop;

private JButton btnRefresh;

private URL address;

private List<String> urls = new ArrayList<String>();

private int nowURL = 0;

public static void main(String[] args) {
new temp();
}

temp() {
jlAddress = new JLabel("地址");
jlInfo = new JLabel();
jtpShow = new JEditorPane();
panel = new JPanel();
jtfAddress = new JTextField(20);
btnGO = new JButton("转到");
this.btnBack = new JButton("后退");
this.btnForward = new JButton("前进");
this.btnRefresh = new JButton("刷新");
this.btnStop = new JButton("停止");
this.btnBack.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
if (nowURL <= 1) {
JOptionPane.showMessageDialog(temp.this, "已经到头啦");
} else {
String str = urls.get(nowURL - 2);
address = new URL(str);
jtfAddress.setText(str);
nowURL--;
jtpShow.setPage(address);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
this.btnForward.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
if (nowURL == urls.size() || nowURL == 0) {
JOptionPane.showMessageDialog(temp.this, "已经到头啦");
} else {
String str = urls.get(nowURL);
address = new URL(str);
nowURL++;
jtfAddress.setText(str);
jtpShow.setPage(address);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
this.btnRefresh.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
try {
String str = jtfAddress.getText();
if (str == null || str.equals("")) {
JOptionPane.showMessageDialog(temp.this, "没有什么可刷的");
} else {
if (!str.startsWith("http://")) {
str = "http://" + str;
}
address = new URL(str);
jtpShow.setPage(address);
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
add(panel, BorderLayout.NORTH);
add(jtpShow, BorderLayout.CENTER);
add(jlInfo, BorderLayout.SOUTH);
panel.add(this.btnBack);
panel.add(this.btnForward);
panel.add(this.btnStop);
panel.add(this.btnRefresh);
panel.add(jlAddress);
panel.add(jtfAddress);
panel.add(btnGO);
setVisible(true);
setSize(350, 280);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnGO.addActionListener(new ShowHTMLListener());
jtpShow.setEditable(false);
jtpShow.addHyperlinkListener(new MyHyperlinkListener());
}

class ShowHTMLListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String str = jtfAddress.getText();
try {
if (!str.startsWith("http://")) {
str = "http://" + str;
}
urls.add(str);
nowURL++;
jlInfo.setText("连接中...");
address = new URL(str);
jtpShow.setPage(address);
jlInfo.setText("完成");
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}

class MyHyperlinkListener implements HyperlinkListener {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
JEditorPane pane = (JEditorPane) e.getSource();
try {// 主要是这里..在网页里点击链接也要加到历史记录里面去..
URL url = e.getURL();
String str = url.toString();
urls.add(str);
jtfAddress.setText(str);
nowURL++;
pane.setPage(url);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-10
。。。。
浏览器啊。。。JAVA啊。。。

java基础和面向对象编程是肯定的
java swt/awt/swing是必须的
http协议、HTML、JS是要精通的

这种想靠自己一个人来写一个浏览器是很难很难的
第2个回答  2010-09-10
浏览器??大哥你在搞笑吧
浏览器是个超级大软件,不是你个人能搞定的,人家一个公司也要开发很长时间才能完成。个人就算了吧。
第3个回答  2010-09-10
算法,数据结构,设计模式

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网