首页 / JAVA / Java等待组件被绘制
Java等待组件被绘制
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java等待组件被绘制,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2134字,纯文字阅读大概需要4分钟。
内容图文
![Java等待组件被绘制](/upload/InfoBanner/zyjiaocheng/828/38a401456b1f407cbb88ad7781281305.jpg)
我正在尝试用Java创建一个程序,它将一个接一个地显示一组图像,调整每个图像的大小.
我正在扩展JPanel以显示如下图像:
public class ImagePanel extends JPanel{
String filename;
Image image;
boolean loaded = false;
ImagePanel(){}
ImagePanel(String filename){
loadImage(filename);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
if(image != null && loaded){
g.drawImage(image, 0, 0, this);
}else{
g.drawString("Image read error", 10, getHeight() - 10);
}
}
public void loadImage(String filename){
loaded = false;
ImageIcon icon = new ImageIcon(filename);
image = icon.getImage();
int w = image.getWidth(this);
int h = image.getHeight(this);
if(w != -1 && w != 0 && h != -1 && h != 0){
setPreferredSize(new Dimension(w, h));
loaded = true;
}else{
setPreferredSize(new Dimension(300, 300));
}
}
}
然后在事件线程中我正在做主要的工作:
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run(){
createGUI();
}
});
在createGUI()中,我将浏览一组图像:
ImagePanel imgPan = new ImagePanel();
add(imgPan);
for(File file : files){
if(file.isFile()){
System.out.println(file.getAbsolutePath());
imgPan.loadImage(file.getAbsolutePath());
pack();
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
问题是我的程序正确调整大小,因此图像正确加载但不显示任何内容.
如果我只显示1个图像,它也适用于最后一个图像.我认为问题是在完成图像绘制之前调用Thread.sleep().
我怎么能等待我的ImagePanel完成绘画并在那之后开始等待?
或者还有另一种解决问题的方法吗?
谢谢!
Leonty
最佳答案:
您的所有代码都在Event Dispatch Thread上执行.这有效地导致所有用户交互进入休眠状态,因为事件调度线程负责所有用户交互 – 输入(事件)和输出(绘图).
你需要等待在美国东部时间之外发生.您需要知道如何在EDT上下执行事件.你可以通过创建一个新的Runnable然后调用新的Thread(runnable)从EDT执行它或SwingUtilities.invokeLater(runnable)来使它在EDT上执行.所有与Swing组件的交互都需要在EDT上进行,因为Swing对象不是线程安全的.所有休眠,等待,文件访问,网络访问,数据库访问或任何可能阻止不确定时间段的内容都必须在美国东部时间之外进行.
Stack Overflow上有很多与Event Dispatch Thread有关的问题.我建议您查看这些内容以查找更多信息和代码示例,以便以不同方式执行您要执行的操作.
内容总结
以上是互联网集市为您收集整理的Java等待组件被绘制全部内容,希望文章能够帮你解决Java等待组件被绘制所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。