码迷,mamicode.com
首页 > 编程语言 > 详细

Java中Desktop类和批量在浏览器打开URI

时间:2015-04-24 12:33:21      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:desktop   browser   浏览器   uri   runtime   

有多个网页网址,我需要查看网页是否正常,近来的我发现很蛋疼,我要一个一个地复制网址,放进地址栏里面,这个一旦网址多个,真心蛋疼,一开始不知道怎么入手,参考了http://www.jb51.net/article/42460.htm这篇文章,然后自己重新去看了API。


第一种方法是之前写定时器工具用到的东西。

Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler http://www.csdn.net");

用的是windows指令的操作,Runtime执行的方法相当于你在dos窗口执行。但是像这样rundll32 url.dll的指令还真不知道。


第二种方法是使用Java提供的Desktop类。

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;


/**
 * @author ckc
 * 照着api来 可以用默认浏览器打开uri  默认的邮件打开发送到uri
 * 默认程序打开 编辑文件
 */
public class TestDesktop {
	public static void main(String[] args) {
		//Desktop对象的创建是通过getDesktop获取实例的
		Desktop dt = Desktop.getDesktop();
		
		//判断Desktop类是否支持当前平台
		if(dt.isDesktopSupported()){
			System.out.println("your platform supproted desktop class!");
		}
		
		//Desktop.Action是枚举类型 有browse edit open mail print这些系统操作
		//下面方法可以判断是否支持该操作
		System.out.println(dt.isSupported(Desktop.Action.MAIL));
		System.out.println(dt.isSupported(Desktop.Action.EDIT));
		System.out.println(dt.isSupported(Desktop.Action.OPEN));
		System.out.println(dt.isSupported(Desktop.Action.BROWSE));
		System.out.println(dt.isSupported(Desktop.Action.PRINT));
		
		//默认用了记事本
		File text = new File("e:/test.txt");
		try {
			dt.edit(text);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//jsp默认用了Sublime Text2  确实用该编辑器打开了
		File jsp = new File("e:/test.jsp");
		try {
			dt.open(jsp);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//打印的发生了IO异常 连到系统上的设备没有发挥作用 应该是电脑没有打印机的关系
		try {
			dt.print(jsp);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//使用了默认的浏览器打开
		URI uri;
		try {
			uri = new URI("www.csdn.net");
			dt.browse(uri);
		} catch (URISyntaxException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

写完这个之后,进行代码的修改,只针对浏览器批量打开URI。

import java.awt.Desktop;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

public class Main {
	public static void test(String uristring) {
		try {
			URI uri = new URI(uristring);
			Desktop dp = Desktop.getDesktop();
			if (dp.isSupported(Desktop.Action.BROWSE)) {
				dp.browse(uri);
			}
		} catch (IOException e) {
			System.out.println("Browser open URI fail");
		} catch (URISyntaxException e) {
			System.out.println("URI is illegal");
		}
	}
}

因为针对的是众多多变的URI,所以不能在程序中写死为字符串数组,最好的方法还是用图形界面,直接拿之前写过的Swing工具修改即可。


import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

/**
 * @author ckc 2015-4-10 14:39:13
 *         当前版本是针对最新的http://download.123cw.cn/AppDownload/
 *         App/SingleGame/mm/bydr401.apk 输入 一组url之后 让系统默认的浏览器 火狐将他们逐一打开
 *         desktop这个类还是蛮好用的
 * 
 * 
 */
public class TestSingleGame {

	// 两个监听器需要用到的变量—— 两个文本域 一个输入一个输出 将其放到全局变量中
	static JTextArea text = new JTextArea(25, 40);
	static JScrollPane outjsp = new JScrollPane();

	public static void main(String[] args) {

		JFrame frame = new JFrame("OpenURLInExplorer");
		// 行数,列数
		BorderLayout layout = new BorderLayout();
		// 窗体大小,窗体位置
		frame.setSize(600, 500);
		frame.setLocation(400, 200);

		Container container = frame.getContentPane();
		container.setLayout(layout);

		JTextField field = new JTextField("url地址:请将地址复制于此并按start运行");
		field.setEditable(false);
		// int rows int columns
		// JTextArea text = new JTextArea(15,80);
		// text.setLineWrap(true); 没有滚动条的时候 true为超出文本框部分也计入
		//

		// 滚动条的添加
		JScrollPane jsp = new JScrollPane(text);
		// int rows int columns

		Box box = Box.createVerticalBox();
		JPanel p = new JPanel();
		BoxLayout blayout = new BoxLayout(p, BoxLayout.Y_AXIS);
		p.setLayout(blayout);
		p.add(field);
		p.add(jsp);

		// frame.setContentPane(p);
		// frame.setLayout(layout);

		JPanel p2 = new JPanel();
		BoxLayout blayout2 = new BoxLayout(p2, BoxLayout.Y_AXIS);
		p2.setLayout(blayout2);
		p2.add(outjsp);

		JButton b = new JButton(
				"start to open every uri at your default browser");
		b.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				// /n为换行符 空字符串直接跳过
				String[] array = text.getText().split("\n");
				for (int i = 0; i < array.length; i++) {
					Main.test(array[i]);
				}
			}
		});
		container.add(p, "North");
		container.add(b, "Center");
		// frame.pack();
		frame.setResizable(false);
		frame.setVisible(true);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

最后的结果:

                                   技术分享

将网址全部录入文本框中,按执行后便会在默认的浏览器中打开。

Java中Desktop类和批量在浏览器打开URI

标签:desktop   browser   浏览器   uri   runtime   

原文地址:http://blog.csdn.net/iaiti/article/details/45244047

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!