【问题标题】:java application GUI responds different after exporting导出后 java 应用程序 GUI 响应不同
【发布时间】:2016-08-04 21:32:51
【问题描述】:

我的应用程序在 Eclipse IDE 上运行良好,但导出后,名声不会重新绘制。 我正在尝试通过删除两个 JPanel 并使用更多面板再次添加它们来重建 JFrame 的布局,这是我的代码:

应用首先调用 buildGUI()

 private void buildGUI(){
        setTitle("MyApp");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setContentPane(new BackGroundImagePanel());
        setResizable(false);
        getContentPane().setLayout(new GridBagLayout());
        c = new GridBagConstraints();

        /*
        *set up GridBagConstraints and add the two panels
        */

        pack();
        setSize(700, 700);
        revalidate();
        setLocationRelativeTo(null);
    }

根据用户输入进行一些计算并调用 reBuildGUI():

private void reBuildGUI(){
        //Clean the frame.
        remove(firstPanel);
        remove(secondPanel);
        //removeAll() doesn't work for me;
        validate();
        repaint();

        /*
        *set up GridBagConstraints and more panels
        */

        pack();
        setSize(700, 700);
        repaint();
        validate();
}

再次,应用程序在 IDE 上运行良好,但不是作为独立的 jar,在调用 reBuildGUI() 时没有任何反应! 尝试以不同的顺序使用 validate()、revalidate() 和 pack() 没有任何收获?

【问题讨论】:

  • 除了确保您将所有图像作为课程资源而不是文件获取之外,如果您没有发布minimal reproducible example,不确定如何回答这个问题。如果您仍然需要帮助,请努力隔离错误并发布您的 MCVE。
  • 不要使用setSize() pack(),如果您希望JFrame 具有特定大小,请使用setSize() 如果您希望 JFrame 成为适合其子组件的最小尺寸,请使用 pack()

标签: java swing user-interface repaint validate-request


【解决方案1】:

气垫船:你说得对,代码还不够,抱歉,我会粘贴几页代码,但不足以调试它。

这里是故障排除: - 指示记录器登录到文件(使用文件处理程序)。 - 找到记录器停止的位置。 - 添加更精细的日志记录,直到找到错误。

错误被深埋在这一行的另一个类方法中:

addOnImage = ImageIO.read(getClass().getClassLoader().getResource("images/AddTextOn.png"));

实际文件名是“ADDTextOn.png”,但 Eclipse 能够将其读取为“AddTextOn.png”,而 JRE 不是,但没有发生任何错误,程序只是什么都不做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    相关资源
    最近更新 更多