我的装载栏有问题。我希望加载栏在开始加载图像之前出现在我的面板上。但是,加载图像后会出现加载条。这是我的代码。
private void initializeProgram(Dimension size){
screenSize = size;
//load class
frame = new JFrame();
homePanel = new HomePanel(size);
loadingBar = new LoadingBar(new Dimension(500, 30));
//initialize class
frame.getContentPane().setLayout(null);
frame.setSize(600, 600);
frame.setVisible(true);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.getContentPane().add(loadingBar);
loadingBar.setLocation(50, 50);
int objectCount;
objectCount = homePanel.getImageCount(); //i have 15 images
loadingBar.setMaxValue(objectCount); //maximum value set to 15
loadingBar.repaint(); //i tried to repaint hoping to appear
frame.getContentPane().repaint(); //here too
for(int i = 0; i<objectCount; i++){
homePanel.loadImage();
loadingBar.setValue(i+1); //moves the loading bar as a sign of
loadingBar.repaint(); //progress, and i want it to repaint
}
System.out.println("DONE!");
//load fonts
//load sounds
}
public void loadImage(){
try{
image[imageLoadedCount] = ImageIO.read(new File(imagePath[imageLoadedCount]));
}
catch(IOException ex){
ex.printStackTrace();
}
imageLoadedCount++;
}
当我尝试运行它时,JFrame是空白的,几秒钟后加载条将与&#34; DONE一起出现!&#34;在输出上打印。
答案 0 :(得分:1)
不要使用空布局。 Swing旨在与Layout Managers一起使用。
应执行frame.setVisible(true)
语句AFTER
所有组件都已添加到框架及其子面板中。
答案 1 :(得分:1)
您的问题可能是因为EDT (event dispatch thread)上的图片加载造成的。这会阻止GUI的其余部分。
对于需要时间的任务,例如加载图片,请使用SwingWorker
。这创建了一个执行任务的新线程,您还可以在运行时查询线程(例如,进度)。在后台线程上运行长任务使EDT可以快速更新。
注意:确保在initial thread中初始化GUI。