日期:2014-05-16  浏览次数:20696 次

linux下java调用浏览器

        最近在做一个项目,是在debian的linux环境下用java开发的,因为系统没有安装图形界面,于是采用调用浏览器显示特定网页来实现的方案。

       现在可以找到的java调用linux浏览器的方法主要有3种,

       第一种是调用桌面默认浏览器的办法,如下所示:    

public static void openURL(String sURL) {
		 try {
			 URI uri = new URI(sURL);
			 Desktop desktop = null;
			 if (Desktop.isDesktopSupported()) {
				 desktop = Desktop.getDesktop();
			 }
			 if (desktop != null)
				 desktop.browse(uri);
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} catch (URISyntaxException e){
			e.printStackTrace();
		}
	 }
      第二种是runtime的办法,如下:
public static void openURLRuntime(String url) {
		   try {
		    Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
		   } catch (Exception ex) {
			   //ex.printStackTrace();
		   }
	 }
    第三种和第二种差不多,但是可以先判断浏览器的类型,如下:      

private static void openURLlinux(String url) throws Exception {
	        //获取操作系统的名字  
	        String osName = System.getProperty("os.name", ""); 
	        String[] browsers = { "google-chrome","firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" }; 
	        String browser = null;
	        for (int count = 0; count < browsers.length && browser == null; count++){
	        	System.out.print( "find:"+count+"\n");
	        	//执行代码,在brower有值后跳出
	        	//这里是如果进程创建成功了,==0是表示正常结束。  
	        	if (Runtime.getRuntime().exec(new String[] { 
	        			"which", browsers[count] }).waitFor() == 0){
	        		browser = browsers[count];
	        		System.out.print( "find browser:"+browser+"\n");
	        	}
	            if (browser == null)
	            	System.out.print( "Could not find web browser");
	            else
	                //这个值在上面已经成功的得到了一个进程。  
	                Runtime.getRuntime().exec(new String[] {browser, url});
	        }
	 }
      不过,可惜的是上边三种方法都没有成功调出浏览器,虽然我在ubuntu上的测试没问题,但是在那个debian上一直不行,于是就想办法,后来找到一个办法,实现调出浏览器的功能,代码如下:

String openChrome="curl http://localhost:8080/runapplication=google-chrome";	//调用浏览器
Runtime.getRuntime().exec(openChrome);
      这个办法可以启动chrome浏览器,但是无法打开特定的网址,于是就采用了一个神一样的办法,设置chrome的默认首页,这样打开浏览器就是那个页面,当然这个办法比较弱智,但还是实现功能了。所以在这里分享一下,供大家参考。

     另外如果有更好地解决办法,欢迎交流,QQ:1776401548。