Java 无法在MAC上打开窗格中的超链接

Java 无法在MAC上打开窗格中的超链接,java,macos,swing,joptionpane,jeditorpane,Java,Macos,Swing,Joptionpane,Jeditorpane,我有一个JEditorPane,显示在JOptionPane中,其中有一个URL,我想在关闭应用程序之前打开它。它在Windows和Linux上运行良好,但在Mac上不起作用 代码如下: //LINK String link = "http://www.google.com/"; String link_name = "Google"; //Editor_Pane JEditorPane editor_pane = new JEditorPane(); editor_pane.setEdito

我有一个JEditorPane,显示在JOptionPane中,其中有一个URL,我想在关闭应用程序之前打开它。它在Windows和Linux上运行良好,但在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);
//链接
字符串链接=”http://www.google.com/";
字符串链接_name=“谷歌”;
//编辑窗格
JEditorPane编辑器_pane=新的JEditorPane();
editor_pane.setEditorKit(JEditorPane.createEditorKitForContentType(“text/html”);
editor_pane.setText(/*一些文本*/+);
编辑器窗格。设置可编辑(false);
//添加一个侦听器
编辑器窗格。添加HyperlinkListener(新的HyperlinkListener(){
公共无效hyperlinkUpdate(HyperlinkEvent e){
如果(例如getEventType()==(HyperlinkEvent.EventType.ACTIVATED)){
//打开链接
尝试{Desktop.getDesktop().browse(e.getURL().toURI());
}catch(IOException | urisyntaxeption e1){e1.printStackTrace();}
//出口
系统出口(0);
}
}
});
//显示窗格
JOptionPane.showOptionDialog(空,编辑器窗格,“文本”,JOptionPane.DEFAULT\u选项,
JOptionPane.PLAIN_消息,null,新对象[]{},null);
该链接似乎可以单击,但单击时不会发生任何事情,即使我尝试删除
桌面。浏览
方法并仅让
退出
方法

我做错了什么?谢谢

尝试添加:

editor_pane.setEditable(false);
该窗格需要为只读,才能单击链接。有关更多详细信息,请参阅:

HTML编辑器它将生成超链接事件,如果 不可编辑(JEditorPane.setEditable(false);已调用)

编辑:

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);
    }
}
尝试添加:

editor_pane.setEditable(false);
该窗格需要为只读,才能单击链接。有关更多详细信息,请参阅:

HTML编辑器它将生成超链接事件,如果 不可编辑(JEditorPane.setEditable(false);已调用)

编辑:

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);
    }
}

@马林酒馆,如果窗户上没有它,它就不能正常工作。你提到“链接似乎可以点击”。光标是否在链接上更改?尝试调试,看看是否进入
hyperlinkUpdate()
。或者添加
System.out.println(e.getEventType())
并查看是否在控制台中打印任何内容。嗯,“.setEditable(false)”最初是在我的代码中,我只是忘记了在这里复制/粘贴它。^ ^”@我明白了,如果你创建一个。不确定您的用例是什么,但是如果显示一个一旦点击就会打开url的标签,这不是更容易吗?在Mac上也是如此@谢谢,它成功了!我只需将鼠标点击(什么也没做)更改为鼠标按下!现在我只需要创建一个看起来像超链接的字体样式@马林酒馆,如果窗户上没有它,它就不能正常工作。你提到“链接似乎可以点击”。光标是否在链接上更改?尝试调试,看看是否进入
hyperlinkUpdate()
。或者添加
System.out.println(e.getEventType())
并查看是否在控制台中打印任何内容。嗯,“.setEditable(false)”最初是在我的代码中,我只是忘记了在这里复制/粘贴它。^ ^”@我明白了,如果你创建一个。不确定您的用例是什么,但是如果显示一个一旦点击就会打开url的标签,这不是更容易吗?在Mac上也是如此@谢谢,它成功了!我只需将鼠标点击(什么也没做)更改为鼠标按下!现在我只需要创建一个看起来像超链接的字体样式!为了更快地获得更好的帮助,请张贴or。为了更快地获得更好的帮助,请张贴or。