在您提出这个问题之前,我知道并且我已经在这里阅读了4或5个相同的问题但没有一个有帮助。
我尝试过使用getdocumnetbase,getcodebase,缓冲图像与图像相比,以及到目前为止我遇到的所有内容。什么都没有帮助我的情况。
我的问题是,当我运行applet时,图像没有显示。我在小程序中添加了一个按钮,看它是否显示但实际上它没有,除非我将鼠标悬停在它上面或重新调整窗口大小。
上诉现在唯一能做的就是显示图像和按钮,但它不起作用。所以我迷路了。
以下是代码:
public void init() {
JPanel panel = new JPanel()
{
public void paintComponent(Graphics g)
{
BufferedImage img = null;
try {
img = ImageIO.read(new File("..\\gifs\\Assembled.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("inside JPanel");
g.drawImage(img, 0, 0, this);
super.paintComponent(g);
}
};
JButton j = new JButton("hi");
panel.add(j);
add(panel);
addMouseListener(this);
repaint();
}
感谢。
现在你已经投了这票(并没有帮助我)让我们看看是否有人可以提供帮助。
public void init(){
JPanel panel = new JPanel(){
public void paintComponent(Graphics g)
{
Image i = null;
try {
i = getImage(new URL(getCodeBase(), "../gifs/Assembled.jpg"));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("inside JPanel");
g.drawImage(i, 0, 0, this);
//super.paintComponent(g);
}
};
this.setLayout(new BorderLayout());
panel.setSize(500,500);
add(panel, BorderLayout.CENTER);
addMouseListener(this);
//repaint();
}
我编辑了代码,但仍然无效。找到并加载图像就好了,但除非我主动重新调整applet的大小,否则它不显示。换句话说,图像仅在重新调整大小时显示,而不显示其他时间。那会是什么原因造成的?哦,它只显示我删除对supper.paintComponent(g);。
的调用哦,你的链接没有帮助看到我在开始发布之前我已经尝试过这些答案。
答案 0 :(得分:2)
小程序由网络服务器提供。 Web浏览器是下载Applet代码并运行它的。因此,Applet在物理上与webbrowser运行的机器运行。
以下一行
img = ImageIO.read(new File("..\\gifs\\Assembled.jpg"));
期望文件存在于运行webbrowser的机器的本地磁盘文件系统中,相对于webbrowser执行的JVM的工作目录。它不指向Web服务器中的文件,也指向Applet的JAR文件中打包的文件(如果有)。当然,您可能不希望最终用户具有已在其本地磁盘文件系统中准备的特定映像文件。
根据文件实际的位置,您需要更改该部分。
如果它实际存储在网络服务器中,相对于从中下载小程序的URL(即代码库),则需要通过URL获取文件。
img = ImageIO.read(new URL(getCodeBase(), "gifs/Assembled.jpg"));
想象一下,小程序由http://example.com/contextname/applet.jar提供,然后上面的示例假定http://example.com/contextname/gifs/Assembled.jpg可以使用该图像。
或者,如果它实际打包在Applet JAR文件中,那么您需要通过classpath获取该文件。想象一下,您已将其存储在Applet JAR文件的/META-INF/gifs/Assembled.jpg
中,然后您需要通过类路径获取它,如下所示:
img = ImageIO.read(getClass().getResourceAsStream("/META-INF/gifs/Assembled.jpg"));
顺便说一句,JPG文件不是GIF文件。我建议将“GIF”重命名为“图像”或其他东西。