Java - 当usign ForkJoinPool时,Applet在Firefox上不起作用(而在Eclipse中工作)



当我在Eclipse上运行以下代码(Luna,javavers=8)时,代码会运行并弹出两条错误消息。另一方面,当我将代码嵌入html页面时,代码只显示第一条错误消息。调用ForkJoinPool类似乎会破坏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";
};

现在小程序正在工作。

再次感谢您的支持。

相关内容

最新更新