Java - 使用 ForkJoinPool 时 Applet 在 Firefox 上不工作(在 Eclipse 中工作)

Java - Applet doesn't work on Firefox when usign ForkJoinPool (while in Eclipse works)

当我在 Eclipse (Luna, java vers=8) 上 运行 以下代码时,代码 运行s 并弹出两条错误消息。另一方面,当我将代码嵌入 html 页面时,代码仅显示第一条错误消息。似乎调用 ForkJoinPool class 会破坏 firefox 上的小程序。 你知道为什么吗?这是代码。

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.ForkJoinPool;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ProvaVera extends JApplet
{
    public void start() 
    {

        SwingUtilities.invokeLater(new Runnable(){
        public void run() 
            {
                MainPanel panel = new MainPanel();      
                // Add Swing components to content pane
                Container c = getContentPane();
                c.add(panel, BorderLayout.CENTER);
            }
        });

    }

}
class MainPanel extends JPanel
{

    public MainPanel()
    {
        JLabel label1 = new JLabel("label1");
        this.add(label1);
        JButton btn1 = new JButton("button1");
        this.add(btn1);

        btn1.addActionListener  (
                new ActionListener() 
                {
                    public void actionPerformed(ActionEvent e)
                    {
                        metodo();
                    }
                }

                );
    }



    public void metodo()
    {
        JOptionPane.showMessageDialog(new JFrame(), "test1", "Dialog", JOptionPane.ERROR_MESSAGE);
        ForkJoinPool pool = new ForkJoinPool();
        JOptionPane.showMessageDialog(new JFrame(), "test2", "Dialog", JOptionPane.ERROR_MESSAGE);
    }
}

您可能遇到安全异常,因为 ForkJoinPool 需要 'modifyThread' 运行 时间权限。

当您 运行 在 Eclipse 中时,没有安装安全管理器,因此您不会遇到安全异常。当您 运行 在浏览器中时,会有一个严格的安全管理器。

我已经从 java 控制面板启用了 Java 控制台。 错误是: java.security.AccessControlException: 访问被拒绝 ("java.lang.RuntimePermission" "modifyThread")

所以我转到位于 java.home/lib/security/ 的 java.policy 文件,然后我写了以下内容

grant codeBase "url or file where the applet is" {
permission java.lang.RuntimePermission "modifyThread";
};

现在小程序正在运行。

再次感谢您的支持。