Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未在Swing Java桌面应用程序中立即绘制/加载图像_Java_Image_Swing_Desktop Application_Loading - Fatal编程技术网

未在Swing Java桌面应用程序中立即绘制/加载图像

未在Swing Java桌面应用程序中立即绘制/加载图像,java,image,swing,desktop-application,loading,Java,Image,Swing,Desktop Application,Loading,当我运行使用Netbean的Swing创建的Java桌面应用程序时,会立即加载JLabel图标图像,但在我唤醒(重新调整)窗口之前,JPanel上的背景图像不会绘制到屏幕上 这是我的JPanel上的自定义代码: Image image = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/background.gif")); javax.swing.JPanel panelBackgroun

当我运行使用Netbean的Swing创建的Java桌面应用程序时,会立即加载JLabel图标图像,但在我唤醒(重新调整)窗口之前,JPanel上的背景图像不会绘制到屏幕上

这是我的JPanel上的自定义代码:

Image image = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/background.gif"));
javax.swing.JPanel panelBackground = new BackgroundPanel(image);
有没有更好的方法来调用图像?是否有我应该实现的图像处理代码


我该如何修理它?

对我来说很好。我用测试工具测试了它。如果您仍然有问题,请发布您的邮件

import java.awt.*;
import javax.swing.*;

public class BackgroundSSCCE extends JPanel
{
    public BackgroundSSCCE()
    {
        setLayout( new BorderLayout() );
        Image duke = java.awt.Toolkit.getDefaultToolkit().getImage(getClass().getResource("dukeWaveRed.gif"));
        BackgroundPanel test = new BackgroundPanel(duke, BackgroundPanel.ACTUAL, 1.0f, 0.5f);
        add(test);
    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("BackgroundSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new BackgroundSSCCE() );
        frame.setSize(200, 200);
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
明白了

非常感谢装满鳗鱼的气垫船作为指针


如果使用ImageIO.read(…)获取图像,会发生什么情况?另外,是否在渲染后将图像显示组件添加到GUI中

camickr,让代码思考

我通过以下方法解决了这个问题:

    Image imgBackground = ImageIO.read(getClass().getResourceAsStream("/images/background.gif"));

在类的开头而不是在JPanels自定义代码部分创建图像并将其分配给变量也很有效。这是因为图像有更多的时间被创建。

写下“有更好的方法调用图像吗?”,我认为不是,布局管理器会发布大量的例子来说明如果使用ImageIO.read(…)获取图像会发生什么?另外,在渲染后是否将图像显示组件添加到GUI中?@Hovercraft谢谢!ImageID.read(…)有效。很高兴它有帮助。我忘记了为什么有时候这比使用工具箱获取图像要好,但我相信部分原因与它们如何处理缓存有关。