2016-08-04 75 views
0

我有一个JEditorPane,在JOptionPane中显示一个我想在关闭我的应用程序之前打开的URL。它在Windows和Linux上运行良好,但在Mac上无法使用。JEditorPane中的超链接无法在MAC上打开

下面是代码:

//LINK 
String link = "http://www.google.com/"; 
String link_name = "Google"; 

//Editor_Pane 
JEditorPane editor_pane = new JEditorPane(); 
editor_pane.setEditorKit(JEditorPane.createEditorKitForContentType("text/html")); 
editor_pane.setText(/*some text*/ + "<a href=\"" + link + "\">" + link_name + "</a>"); 
editor_pane.setEditable(false); 

//ADD A LISTENER 
editor_pane.addHyperlinkListener(new HyperlinkListener(){ 
    public void hyperlinkUpdate(HyperlinkEvent e){ 
     if(e.getEventType() == (HyperlinkEvent.EventType.ACTIVATED)){ 

      //OPEN THE LINK 
      try{ Desktop.getDesktop().browse(e.getURL().toURI()); 
      }catch (IOException | URISyntaxException e1) {e1.printStackTrace();} 

      //EXIT 
      System.exit(0); 
     } 
    } 
}); 

//SHOW THE PANE 
JOptionPane.showOptionDialog(null, editor_pane, "text", JOptionPane.DEFAULT_OPTION, 
          JOptionPane.PLAIN_MESSAGE, null, new Object[] {}, null); 

的链接似乎可点击的,但是当我点击,即使我尝试删除Desktop.browse方法,让只有exit方法没有任何反应。

我在做什么错?谢谢 !

+0

为了更好地帮助越早,张贴[MCVE]或[简要,独立的,正确的示例](http://www.sscce.org/)。 –

回答

4

尝试增加:

editor_pane.setEditable(false); 

的面板必须是只读的链接点击。详情请参阅JEditorPane

的HTML的EditorKit将生成超链接事件如果对JEditorPane 是不可编辑的(了JEditorPane.setEditable(假);被调用)。

编辑:

import java.awt.Cursor; 
import java.awt.Desktop; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.net.URI; 

import javax.swing.JLabel; 
import javax.swing.JOptionPane; 

public class TestLink { 

    public static void main(String[] args) { 
     JLabel label = new JLabel("stackoverflow"); 
     label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 

     label.addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent e) { 
       if (Desktop.isDesktopSupported()) { 
        try { 
         Desktop.getDesktop().browse(new URI("http://stackoverflow.com")); 
        } catch (Exception ex) { 
         ex.printStackTrace(); 
        } 
        } else { 
         //TODO 
        } 
      } 
     }); 
     JOptionPane.showMessageDialog(null, label); 
    } 
} 
+0

谢谢!我试过了,但它仍然不起作用... –

+0

@MarinTaverniers,没有它在Windows上它没有工作。你提到'_该链接似乎clickable_'。光标是否改变链接?尝试调试,看看你是否进入'hyperlinkUpdate()'。或者添加'System.out.println(e.getEventType());'并查看是否在控制台中打印了任何内容。 – tenorsax

+0

那么“.setEditable(false)”最初是在我的代码中,我只是忘了在这里复制/粘贴它。^^' –