返回列表 回复 发帖

swing 写的 whois查询工具

以前写的:
  1. package whois;

  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.io.BufferedReader;
  6. import java.io.InputStreamReader;
  7. import java.net.URL;
  8. import java.net.URLConnection;
  9. import java.util.regex.Matcher;
  10. import java.util.regex.Pattern;

  11. import javax.swing.*;

  12. public class Frame1 extends JFrame {
  13.     JPanel contentPane;
  14.     BorderLayout borderLayout1 = new BorderLayout();
  15.     JSplitPane jSplitPane1 = new JSplitPane();
  16.     JPanel jPanel1 = new JPanel();
  17.     BorderLayout borderLayout2 = new BorderLayout();
  18.     JTextField txtip = new JTextField();
  19.     JButton btnok = new JButton();
  20.     JPanel jPanel2 = new JPanel();
  21.     BorderLayout borderLayout3 = new BorderLayout();
  22.     JScrollPane jsc = new JScrollPane();
  23.     JLabel lab = new JLabel();
  24.     JList lst = new JList();
  25.     JLabel jLabel1 = new JLabel();
  26.     public Frame1() {
  27.         try {
  28.             setDefaultCloseOperation(EXIT_ON_CLOSE);
  29.             jbInit();
  30.         } catch (Exception exception) {
  31.             exception.printStackTrace();
  32.         }
  33.     }

  34.     /**
  35.     * Component initialization.
  36.     *
  37.     * @throws java.lang.Exception
  38.     */
  39.     private void jbInit() throws Exception {
  40.         contentPane = (JPanel) getContentPane();
  41.         contentPane.setLayout(borderLayout1);
  42.         setSize(new Dimension(413, 442));
  43.         setTitle("WHOIS 查 询 JAVA 版");
  44.         jSplitPane1.setOrientation(JSplitPane.VERTICAL_SPLIT);
  45.         jSplitPane1.setDividerSize(1);
  46.         jPanel1.setLayout(borderLayout2);
  47.         btnok.setText("查询");
  48.         btnok.addActionListener(new Frame1_btnok_actionAdapter(this));
  49.         jPanel2.setLayout(borderLayout3);
  50.         lab.setBackground(Color.white);
  51.         lab.setBorder(null);
  52.         lab.setText("Code By NinTy");
  53.         jLabel1.setText("域名:");
  54.         contentPane.add(jSplitPane1, java.awt.BorderLayout.CENTER);
  55.         jSplitPane1.add(jPanel1, JSplitPane.TOP);
  56.         jPanel1.add(txtip, java.awt.BorderLayout.CENTER);
  57.         jSplitPane1.add(jPanel2, JSplitPane.BOTTOM);
  58.         jPanel2.add(jsc, java.awt.BorderLayout.CENTER);
  59.         jsc.getViewport().add(lst);
  60.         jPanel2.add(lab, java.awt.BorderLayout.SOUTH);
  61.         jPanel1.add(jLabel1, java.awt.BorderLayout.WEST);
  62.         jPanel1.add(btnok, java.awt.BorderLayout.EAST);
  63.         jSplitPane1.setDividerLocation(30);
  64.     }

  65.     public void btnok_actionPerformed(ActionEvent e) {
  66.         String ip = txtip.getText(); //得到输入的域名

  67.         if (ip.equals("")) { ///非空验证
  68.             javax.swing.JOptionPane.showMessageDialog(this, "请输入域名!");
  69.             return;
  70.         }

  71.         if (ip.matches("http://.+/")) { //检测是不是以http:// 或者以/结束 如果是 提示错误
  72.             javax.swing.JOptionPane.showMessageDialog(this,
  73.                     "域名不能以http://开头或者以/结束!");
  74.             return;
  75.         }

  76.         try {
  77.             URL url = new URL( //新建url类对象  用得到的域名构造一个url
  78.                     "http://www.seologs.com/ip-domains.html?domainname=" + ip);
  79.             URLConnection connection = url.openConnection(); //得到这个url的连接
  80.             lab.setText("正在查询。。。");
  81.             BufferedReader reader = new BufferedReader(new InputStreamReader( //用这个url连接的getInputStream方法得到一个读取服务端响应的输入流! 用InputStreamReader把字节流转换成字符流 用BufferedReader读取!
  82.                     connection.getInputStream()));
  83.             StringBuffer sb = new StringBuffer();  ///构造可变字符串,存储读取到的第一行信息

  84.             String str = reader.readLine();  /////循环读取服务端发来的响应
  85.             while (str != null) {
  86.                 sb.append(str);  //把读到的第一行都添加到可变字符串中!
  87.                 str = reader.readLine();
  88.             }

  89.             DefaultListModel model = new DefaultListModel();  ///// 构造一个JList模型对象 用来存储JList显示的数据
  90.             Pattern pattern = Pattern.compile("\\d+\\)(.+?)
  91. ");  //构造正则表达式对象
  92.             Matcher matcher = pattern.matcher(sb.toString());  ////  构造刚才的正则表达式对象的匹配器对象 用sb.toString() 得到sb的字符串
  93.             int i = 0;  ////  声明一个计数变量,因为上面那个正则不太准确 查出来的网址第一行总是多出来的 懒的改正则了 就声明这个i用来检测是不是第一行 如果是 就不加到JList模型中
  94.             int nums = 1;  ///计数变量 表示网址数量
  95.             while (matcher.find()) {  //用匹配器对象对sb的字符串进行匹配 如果匹配成功 进入循环
  96.                 if (i == 0) {  ///// 如果是第一次匹配成功
  97.                     i++;  ///把i的值改成1  不把第一次匹配成功的数据加到JList模型中
  98.                 } else if (i != 0) {  ///如果i不等于0  就把查到的网址加到模型中
  99.                     model.addElement("" + nums + "." + matcher.group(1));
  100.                     nums++;
  101.                 }
  102.             }

  103.             if (model.size() == 0) {  /////检测模型里的数据量 如果是0 提示没有记录
  104.                 javax.swing.JOptionPane.showMessageDialog(this, "没有查询到任何记录");
  105.             } else {
  106.                 lst.setModel(model);  ////如果不是0  设置JList的模型  让它把数据显示出来
  107.             }

  108.             lab.setText("查询完成!");

  109.         } catch (Exception ex) {
  110.             ex.printStackTrace();
  111.         }
  112.     }

  113.     public static void main(String[] args) {
  114.         new Frame1().setVisible(true);
  115.     }
  116. }


  117. class Frame1_btnok_actionAdapter implements ActionListener {
  118.     private Frame1 adaptee;
  119.     Frame1_btnok_actionAdapter(Frame1 adaptee) {
  120.         this.adaptee = adaptee;
  121.     }

  122.     public void actionPerformed(ActionEvent e) {
  123.         adaptee.btnok_actionPerformed(e);
  124.     }
  125. }
复制代码
很牛呀~~~!!!
来顶下`
一起顶。。。。。。。。。。。。。。。。。
顶起来。。。。。。。。。。。
返回列表