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";
};
现在小程序正在运行。
再次感谢您的支持。
当我在 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";
};
现在小程序正在运行。
再次感谢您的支持。