【问题标题】:Why is my JFrame not appearing in a web based Java app?为什么我的 JFrame 没有出现在基于 Web 的 Java 应用程序中?
【发布时间】:2011-05-15 20:09:04
【问题描述】:

我有一个游戏应用程序,我将使用该标签在网络浏览器中运行它。 这个程序有一个 JFrame,它显示了几个选项卡,允许在整个程序中导航。 当我在本地运行程序时,它会正常工作,显示 JFrame 并完整工作。 但是,当我将它上传到主机并访问它的链接时,JFrame 将不会显示..

我已经搜索了大约 3 个小时,根本无法为我的情况提供正确的关键字。 我在结果中所能得到的只是 JFrame 在本地或网络应用程序中根本没有出现。

这是我从同一个 .jar 本地运行客户端时的外观:

这是客户端在网络浏览器中的外观(尝试过 IE、FF 和 Chrome):

Applet.java:

public class Client extends RSApplet {

    public static void main(String args[]) {
        try {
            instance = new Client();
            new UserInterface(args);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

}

GUI.java

public class GUI extends Applet implements ActionListener, WindowListener, FocusListener {

    public UserInterface(String args[]) {
        try {
        /* ------------------------------------------------------------------------ */
        /* Metal                                                                    */
        /*  UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");    */
        /* System Look                                                              */
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        /* ------------------------------------------------------------------------ */
            initGUI();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    public void initGUI() {
        try {
            JFrame.setDefaultLookAndFeelDecorated(true);
            JPopupMenu.setDefaultLightWeightPopupEnabled(false);
            frame = new JFrame(frameTitle);
            frame.setLayout(new BorderLayout());
            Image icon = Toolkit.getDefaultToolkit().getImage(iconDir);
            frame.setIconImage(icon);
            gamePanel = new JPanel();
            gamePanel.setLayout(new BorderLayout());
            gamePanel.add(this);
            gamePanel.setPreferredSize(new Dimension(850, 600));
            frame.getContentPane().add(gamePanel, BorderLayout.CENTER);
            frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            frame.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    if (loggedIn == false) {
                        System.exit(0);
                    } else {
                        if (showMessage("Are you sure you want to close the game?") == true) {
                            System.exit(0);
                        } else return;
                    }
                }
            });
            initMenuBar();
            frame.pack();
            frame.setVisible(true);
            frame.setResizable(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void initMenuBar() {
        menuBar = new JMenuBar();
        /** File **/
        fileMenu = new JMenu("File");
        String[] fileMenuItems = {
            "Quit"
        };
        menuBar.add(fileMenu);
        /** Quick Links **/
        linksMenu = new JMenu("Quick Links");
        String[] linksMenuItems = {
            "Home", "News", "Donate"
        };
        menuBar.add(linksMenu);
        frame.getContentPane().add(menuBar, BorderLayout.NORTH);
    }

}

【问题讨论】:

    标签: java swing applet jframe


    【解决方案1】:

    您是否尝试将应用程序放在网页上,我的意思是作为 Web 应用程序运行。如果是,那么您需要 Applet 或 JApplet 而不是框架。框架可以正常工作,但要将其添加到网站,则需要将其设为小程序。使用下面的链接..

    se6 的 JApplet 类-http://download.oracle.com/javase/6/docs/api/javax/swing/JApplet.html JApplet/Applet 教程 -- http://download.oracle.com/javase/tutorial/uiswing/components/applet.html

    祝你好运

    【讨论】:

    • 好的,我会尽快阅读它们,谢谢您的回复。这是否需要我拥有两个不同的代码副本,因为我希望允许用户将 .jar 下载到他们的计算机上,以便在他们选择时在 Web 浏览器之外运行。或者这是否允许在 Web 应用程序和本地运行时绘制条形图?
    • 有一种叫做 web start(jnlp) 的东西我刚刚以这种形式编写了 2 个应用程序,所以我真的不太了解,但如果它不是一个非常大的应用程序,那么你可以制作 2 个不同的应用程序。一个是jar,一个是applet。
    • 我刚刚查看了您的代码,可以看到您已经开始使用 Applet,但您没有所需的方法,如 init()、start() 和 stop()。至少 init() 方法必须被覆盖
    • 好吧,在您的第一条评论中,它不是一个小应用程序,运行大约 356kb,它不算大,但也不小。如果需要,我可以提供两个应用程序。 @第二条评论:是的,我明白你的意思,阅读关于如何制作的短文。 =P
    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多