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();
}
}
}
}
}
做一个简单的浏览器不需要“精通”的 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();
}
}
}
}
}
展开全部
。。。。
浏览器啊。。。JAVA啊。。。
java基础和面向对象编程是肯定的
java swt/awt/swing是必须的
http协议、HTML、JS是要精通的
这种想靠自己一个人来写一个浏览器是很难很难的
浏览器啊。。。JAVA啊。。。
java基础和面向对象编程是肯定的
java swt/awt/swing是必须的
http协议、HTML、JS是要精通的
这种想靠自己一个人来写一个浏览器是很难很难的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
浏览器??大哥你在搞笑吧
浏览器是个超级大软件,不是你个人能搞定的,人家一个公司也要开发很长时间才能完成。个人就算了吧。
浏览器是个超级大软件,不是你个人能搞定的,人家一个公司也要开发很长时间才能完成。个人就算了吧。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
算法,数据结构,设计模式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询