2010-04-14 74 views
0

我一直试图在运行时间内动态加载图像时间最长,并且查看了本网站上的其他帖子,并且尚未找到完全相同的东西将工作。我正在尝试在我的GUI运行时(在运行时创建它)加载图像并尝试了各种各样的东西。现在,我发现创建图像的最简单方法是使用JLabel并为其添加ImageIcon。这一直奏效,但是当我在GUI运行之后加载它时,它失败了,说有一个“NullPointerException”。这里是我的代码至今:如何在java中运行时动态添加图像

p = Runtime.getRuntime().exec("python C:\\FaceVACS\\roc.py " + "C:/FaceVACS/OutputCMC_" + target + ".txt " + "C:/FaceVACS/ROC_" + target + ".png"); 
Icon graph = new ImageIcon("C:\\FaceVACS\\OutputCMC_" + target + ".png"); 
roc_image.setIcon(graph); 
panel.add(roc_image); 
panel.revalidate(); 
gui.frame.pack(); 

我试过panel.validate(),panel.revalidate(),我也试着gui.getRootPane(),但我似乎无法找到任何可以工作的东西。

任何想法都会有帮助!谢谢

回答

2

getRuntime().exec是用于启动外部程序。为了简单加载一个文件在你的Java应用程序中使用,你可以简单地像对待其他文件一样对待它。事实上,如果您使用Swing,则ImageIcon构造函数会将包含文件路径的String作为参数。

How to add an image to a JPanel?

上述问题,介绍了如何将图像添加到一个JPanel,这可以在运行时通过一个事件处理程序来完成。

+0

我是那种给上下文为什么我添加的图像与p.Runtime.getRuntime()EXEC()...这只是运行一个python脚本,节省出来的图像我期待发布。除了生成它外,它与图像无关。 – Brandon 2010-04-14 22:18:46

0

您还可以使用标签来显示图像。这tutorial告诉你如何。

+0

roc_image是一个标签...因此它已被添加到标签。 – Brandon 2010-04-14 22:41:06

2

,这只是运行一个python脚本,节省出来的图像我期待张贴

听起来就像是问题是代码试图加载图像的python脚本完成创建映像前。尝试:

Process p = Runtime.getRuntime().exec("..."); 
p.waitFor(); 
Icon icon = new ImageIcon(...); 
+0

+1 for'waitFor'尽管整个处理(调用脚本并等待结果)应该在单独的线程中运行。否则,它会冻结UI。之后它应该调用'SwingUtilities.invokeLater'来更新UI – OscarRyz 2010-04-15 00:09:37