我回来了另一个问题。我之前没有使用Java中的URL和超链接,也没有使用html标记的经验。我已经阅读了教程和很多SO问题,似乎无法弄清楚为什么我会在这里抛出异常。
所以我有一个程序,我添加了一个"关于"按钮到。单击它将打开JOptionPane。在JOptionPane内部,我有一个带有大量文本的JEditorPane,最后是我用作源的网站的两个超链接。现在我添加了链接并且它们是可点击的,但是当我单击它们时,它会抛出NullPointerException。我确信它与ActionListener有关,我尝试了几种不同的方法来实现相同的结果。
我想要发生的是,当点击链接时,它会打开默认浏览器并导航到该网站。这是我试图调试的一个测试程序,但包含与我的主要代码相同的代码。
import java.awt.Desktop;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
public class HyperlinkTest extends JFrame {
private static final long serialVersionUID = 1L;
JPanel panel = new JPanel();
JButton aboutButton = new JButton("About");
public void aboutPopUp() throws IOException {
final JEditorPane ep = new JEditorPane();
ep.setEditable(false);
ep.setEditorKit(JEditorPane.createEditorKitForContentType("text/html"));
ep.setText("<html>Blah Blah<br />"
+ "Blah Blah<br />"
+ "Blah: <a href=\\\"\\\">http://exploration.grc.nasa.gov/education/rocket/rktcg.html</a><br />"
+ "Blah: <a href=\\\"\\\">http://exploration.grc.nasa.gov/education/rocket/rktcp.html</a></html>");
// handle link events
ep.addHyperlinkListener(new HyperlinkListener() {
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (HyperlinkEvent.EventType.ACTIVATED.equals(e.getEventType())) {
if (Desktop.isDesktopSupported()) {
try {
Desktop.getDesktop().browse(e.getURL().toURI());
} catch (IOException | URISyntaxException e1) {
e1.printStackTrace();
}
}
}
}
});
JOptionPane.showMessageDialog(null, ep, "How To Use", JOptionPane.PLAIN_MESSAGE);
}
private void aboutButtonActionPerformed(ActionEvent ab) throws IOException {
aboutPopUp();
}
private void initComponents() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(panel);
panel.add(aboutButton);
aboutButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ab) {
try {
aboutButtonActionPerformed(ab);
} catch (IOException ex) {
Logger.getLogger(HyperlinkTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
pack();
setLocationRelativeTo(null);
}
public HyperlinkTest() {
initComponents();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new HyperlinkTest().setVisible(true);
}
});
}
}
提前感谢你们提供的任何帮助,你们都摇滚!!
答案 0 :(得分:0)
你有
ep.setText("<html>Blah Blah<br />"
+ "Blah Blah<br />"
+ "Blah: <a href=\\\"\\\">http://exploration.grc.nasa.gov/education/rocket/rktcg.html</a><br />"
+ "Blah: <a href=\\\"\\\">http://exploration.grc.nasa.gov/education/rocket/rktcp.html</a></html>");
我认为你想要的是
ep.setText("<html>Blah Blah<br />"
+ "Blah Blah<br />"
+ "Blah: <a href=\"http://exploration.grc.nasa.gov/education/rocket/rktcg.html\">http://exploration.grc.nasa.gov/education/rocket/rktcg.html</a><br />"
+ "Blah: <a href=\"http://exploration.grc.nasa.gov/education/rocket/rktcp.html\">http://exploration.grc.nasa.gov/education/rocket/rktcp.html</a></html>");
请注意我没有编译此。你可能需要更好地/不同地逃避事情。
此外,您可能需要查看this