2012-06-22 124 views
0

我們在運行於JRE 1.6.0_26的小程序中運行以下代碼。Desktop.browse()打開多個窗口

Desktop.getDesktop().browse(new URI("www.google.com") 

在某些Windows 7 64位,IE8機器上,此命令會打開兩個窗口,但不會打開其他應該是相同設置的窗口。 有沒有人有任何想法會導致這種情況?

+0

這甚至不是一個可編輯的陳述。爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 –

+0

順便說一句Applet也有['AppletContext.showDocument(URL,target)'](http://docs.oracle.com/javase/7/docs/api/java/applet/AppletContext.html#showDocument%28java.net。 URL,%20java.lang.String%29)。如果用戶擁有插件2 JRE,那麼您也可以使用[Java Web Start](http://stackoverflow.com/tags/java-web-start/info)並使用'BasicService'方法顯示一個新頁面。 –

回答

0

我強烈懷疑這只是一些編碼粗心(我和其他任何人一樣有罪)。

考慮下面的代碼:

JButton myButton1 = new JButton("Click 1"); 
myButton1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     Desktop.getDesktop().browse(new URI("www.google.com")); 
    } 
}); 

JButton myButton2 = new JButton("Click 2"); 
myButton1.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 
     Desktop.getDesktop().browse(new URI("www.google.com")); 
    } 
}); 

注意這裏的錯誤嗎?

其目的是爲每個按鈕分配一個動作,但由於在myButton2定義之後不小心複製/粘貼,我們錯誤地將第二個動作分配給myButton1。

現在會發生什麼是當用戶點擊myButton1時,第一個動作將被調用,導致瀏覽器顯示www.google.com顯示,然後第二個動作將被調用,導致另一個選項卡在該窗口或整個其他窗口中(取決於您的瀏覽器設置)。