首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

求好手点拨一个“打开网址”的Java功能源代码的“一个功能调用打开两个页面”的原因.

2014-01-14 
求高手点拨一个“打开网址”的Java功能源代码的“一个功能调用打开两个页面”的原因...高手,您好:我在写一个Ja

求高手点拨一个“打开网址”的Java功能源代码的“一个功能调用打开两个页面”的原因...
高手,您好:
    我在写一个Java程序,其中用到了“打开URL地址”的功能,我调用了下面的“打开网址”的类型:
    

package c_port_packageBJUser;
 /////////////////////////////////////////////////////////  
 //Bare Bones Browser Launch                            //  
 //Version 1.5 (December 10, 2005)                    //  
 //By Dem Pilafian                                                //  
 //支持: Mac OS X, GNU/Linux, Unix, Windows XP//  
 //可免费使用                                                        //
 /////////////////////////////////////////////////////////  
   
 /** 
  * @author Dem Pilafian 
  * @author John Kristian 
  */  
 import java.lang.reflect.Method;
   
 public class BareBonesBrowserLaunch {  
   
     public static void openURL(String url) {  
         try {  
             browse(url);  
         } catch (Exception e) {  
         }  
     }  
   
     private static void browse(String url) throws Exception {  
         //获取操作系统的名字  
         String osName = System.getProperty("os.name", "");  
         if (osName.startsWith("Mac OS")) {  
             //苹果的打开方式  
             Class fileMgr = Class.forName("com.apple.eio.FileManager");  
             Method openURL = fileMgr.getDeclaredMethod("openURL", new Class[] { String.class });  
             openURL.invoke(null, new Object[] { url });  
         } else if (osName.startsWith("Windows")) {  
            //windows的打开方式。  
             Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);  
         } else {  
             // Unix or Linux的打开方式  
             String[] browsers = { "firefox", "opera", "konqueror", "epiphany", "mozilla", "netscape" };  
             String browser = null;  
             for (int count = 0; count < browsers.length && browser == null; count++)  
                 //执行代码,在brower有值后跳出,  
 //这里是如果进程创建成功了,==0是表示正常结束。  
                 if (Runtime.getRuntime().exec(new String[] { "which", browsers[count] }).waitFor() == 0)  
                     browser = browsers[count];  
             if (browser == null)  
                 throw new Exception("Could not find web browser");  
             else  
                 //这个值在上面已经成功的得到了一个进程。  


                 Runtime.getRuntime().exec(new String[] { browser, url });  
         }  
     }  
 }  


    弟我调用上述类型的代码现场如下:
    
package c_port_packageBJUser;

import java.awt.Dialog;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.InetAddress;

import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.ScrollPaneConstants;


//创建ChatClient类作为聊天窗口;
public class Complete_ChatForeUIUserClient extends JFrame implements WindowListener,KeyListener,ItemListener, ActionListener
{
int lennum = 0;
private static final long serialVersionUID = 1L;
static Integer ChatPartnerSerialMark = 200;
Integer ChatFriNum = 200;
JScrollPane jspanel0 = null;
JScrollPane jspanel1 = null;
static DataOutputStream dops3 = null;
JPanel jp = new JPanel(); 
static DataInputStream dips3 = null;
boolean started = false;
InetAddress addr = null;
String title = "获取好友资料";
String chatword = null;
Dialog ordernum = new Dialog(this,title,started);
    String str;
    int T =0;
    public static String UIDLocal = null;
    static String roleLocal = null;
    static String iPAddressLocal = null;
    String Local_User_facia = null;
    Integer MyLocalSysNum = -1;
    static String MyChatObjrolE = null;
    JPanel jp1 = new JPanel();
    JTextArea Jta2 = new JTextArea();
String UserFuct = null;
JTextArea Jta1 = new JTextArea();
String[] s = {"查看好友信誉","输入用户编号获取用户资料","截图","发送文件","接收文件","投诉好友","音频通信","视频通信","查看好友详细","打开好友列表","打开聊天记录","获取客户所在地IP","转存本用户聊天记录"};
JComboBox<String> combo1 = null;
MyJButtonPayformyfuct jb1 = null;
OutputStream outputstream = null;

//CaptureScreen capScreen = new CaptureScreen(); 

public Complete_ChatForeUIUserClient(String UID,Integer MySysPriNum,String User_facia,Integer ChatObjectNum,String ChatObjrolE,String MyIP){
System.out.println("C端Complete_ChatForeUIUserClient");
this.setBounds(new Rectangle(419,92,590,550));
UIDLocal = UID;
MyLocalSysNum = MySysPriNum;
roleLocal = "User";
str = User_facia;
this.setTitle(str);
ChatPartnerSerialMark = ChatObjectNum;
MyChatObjrolE = ChatObjrolE;
iPAddressLocal = MyIP;
combo1 = new JComboBox<String>(s);
jb1 = new MyJButtonPayformyfuct("购买服务",String.valueOf(ChatObjectNum),ChatObjrolE,this);
//TODO:
Jta2.addKeyListener(this);
combo1.addItemListener(this);
 Jta1.setLineWrap(true); //如果加上这一句,那么水平方向的滚动条永远不会出现。
  Jta1.setEditable(false); 
combo1.setBounds(new Rectangle(28,240,200,20));
    jspanel0=new JScrollPane(Jta1);
    jspanel1 = new JScrollPane(Jta2);
    jspanel0.setBounds (new Rectangle (10,10,500,220));
    jspanel1.setBounds (new Rectangle (10,280,500,220));
    jspanel0.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
    jspanel0.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    jspanel1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
jspanel1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jp1.setLayout(null);
Jta1.setLineWrap(true);//激活自动换行功能
Jta2.setLineWrap(true);
Jta2.setWrapStyleWord(true);//激活断行不断字功能
    Jta1.setWrapStyleWord(true);//激活断行不断字功能
jb1.setBounds(new Rectangle(353,240,100,20));
jb1.addActionListener(this);
jp1.setBounds(new Rectangle(10,10,590,550));
jp1.add(jb1);
jp1.add(combo1);
jp1.add(jspanel0);
  jp1.add(jspanel1);
  setVisible(true);
  setDefaultCloseOperation(DISPOSE_ON_CLOSE);


}

public void start() {
this.add(jspanel0);
this.add(jspanel1);
this.add(jp1);
jp1.setVisible(true);
this.setVisible(true);
}

@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub


}

@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub

SocketClient so2 = new SocketClient(Recv.D_PORT_SERVER,9999);
synchronized(so2){
    so2.writeStr("18丗18丗"+"User"+"丗"+RelayNo1.LocalMyWorkNum+"丗"+"User"+"丠"+RelayNo1.LocalMyWorkNum+"丠"+ChatPartnerSerialMark+"丠"+"User"+"丠"+"BeiJing"+"丗"+"C"+"丗"+"BeiJing","Complete_ChatForeUIUserClient");
    so2.getMyResourceBack();
}
}

@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
SocketClient so3 = new SocketClient(Recv.S_PORT_SERVER,8811);
String content = "8丗IcloseOneFrame丗C丗User丗"+NoteUserLoginFrame.MyworkNum;
so3.writeStr(content, "Complete_ChatForeUIUserClient");
so3.getMyResourceBack();
}

@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub
}

@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub

}

public static void main(String[] args){
new Complete_ChatForeUIUserClient("测试账户0",0,"CJCO!!加油!!",2,"User","222.196.1.8").start();

}


@Override
public void windowOpened(WindowEvent e)
{
// TODO Auto-generated method stub

}
@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
     if(e.isControlDown()&&e.getKeyCode()==KeyEvent.VK_ENTER){
String Chatword = Jta2.getText().trim();
Jta1.append(Chatword+"\r\n");
Jta1.setCaretPosition(Jta1.getText().length());
Jta2.setCaretPosition(Jta2.getText().length());
Jta2.setText("");
Integer MySysserNum = Integer.parseInt("1");
    String str = "1丗"+MySysserNum+"丠"+"User"+"丠"+ChatPartnerSerialMark+"丠"+MyChatObjrolE+"丠"+iPAddressLocal+"丠"+GetTheSysData.getTheLocalData()+"`"+Chatword+"丗"+"C"+"丗"+"User"+MySysserNum;
SocketClient so3 = new SocketClient(Recv.S_PORT_SERVER,8811);
synchronized(so3){
so3.writeStr(str,"Complete_ChatForeUIUserClient");
}
so3.getMyResourceBack();
     }

}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void itemStateChanged(ItemEvent e) {
// TODO Auto-generated method stub
UserFuct = (String)combo1.getSelectedItem(); 
if(UserFuct.equals("输入用户编号获取用户资料")){
new Code_Customer_OrderNum();
}else if(UserFuct.equals("查看好友信誉")){
String url = "www.baidu.com";
BareBonesBrowserLaunch.openURL(url);
}
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub  
}

}


    高手,弟我在进行了上述的代码第209行代码的BareBonesBrowserLaunch类的openURL()方法的调用后,得到的效果为:
    打开了两个百度的首页.
    希望高手能够指导:
    为什么?
    怎样修改...?
    希望得到高手的相助!!
    一百分奉上!!

[解决办法]
不应该吧。代码应该只是打开了一次。
有没有这种可能:
你的浏览器默认首页是baidu.com。然后你的代码是打开baidu.com
所以代码运行后就看到两个baidu.com了
[解决办法]
itemStateChanged 方法会调用两次,分别是ItemEvent.SELECTED和ItemEvent.DESELECTED。
而且即使选项框没动,也会被调用事件,所以加判断。
 if(e.getStateChange() == ItemEvent.SELECTED)
就不会执行两次了。

热点排行