java小程序ExceptionInInitializerError

java applet ExceptionInInitializerError

我是 Applets 编程的新手,想制作一个 Applet 放在网站上。 所以我们开始吧。

这个项目的目标是,如果您单击该按钮,它将在浏览器顶部打开一个 JFrame。但是在测试时,它给了我一个 java.lang.ExceptionInInitializerError。 这是源代码:

public class LaunchMenu extends Applet {

    public static LoginScreen login;
    public static Game game;
    public JButton button;
    public void init() {
        try {button= new JButton("Press this button to start");
        add(button);

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                login = new LoginScreen();

            }
        });
        } catch (Exception e) {
            e.getMessage();
            e.getCause();
        }
    }

    public void start() {
        login = new LoginScreen();
    }

    public void stop() {
        login.dispose();
        game.stop();
    }

    public static void main(String[] args) {

    }

}

注意:它可以在 Eclipse 中使用它的 Applet window,但不能在网站上使用。

编辑:

Exception in thread "AWT-EventQueue-2" java.lang.IllegalStateException: Applet's parent container not set up
    at sun.plugin2.applet.Plugin2Manager.start(Unknown Source)
    at sun.plugin2.main.client.PluginMain$StartAppletRunner.run(Unknown Source)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access0(Unknown Source)
    at java.awt.EventQueue.run(Unknown Source)
    at java.awt.EventQueue.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
CacheEntry[http://localhost/AppletTest/Applet.jar]: updateAvailable=true,lastModified=Mon Apr 13 12:24:52 CEST 2015,length=5051938

好的,我解决了我的问题。这是对我有用的解决方案。

源代码保持不变(除了一个小改动)*:

public class LaunchMenu extends Applet {

    public static LoginScreen login;
    public static Game game;
    public JButton button;
    public void init() {
        try {button= new JButton("Start the game");
        add(button);

        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                login = new LoginScreen();
                login.setVisible(true); *

            }
        });
        } catch (Exception e) {
            e.getMessage();
            e.getCause();
        }
    }

    public void start() {
        login = new LoginScreen();
    }

    public void stop() {
        login.dispose();
        game.stop();
    }

    public static void main(String[] args) {

    }
}

但我在与小程序相同的文件夹中添加了一个 java.policy 文件。 在此文件中,我编写了以下代码:

grant { 
      permission java.security.AllPermission; 
}; 

设置完成后,我 运行 在另一个名为 java.lang.RuntimePermission: "exitVM.0"

的问题中

这个问题的解决方法很简单。在我的 JFrame 的 class 中,在我的例子中 LoginScreen,有一个行代码 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);。删除它或评论它,这对我有用,现在我的小程序可见并且登录框架打开。这就是我所需要的。

希望这能帮助很多遇到同样问题的人。