1

它给了我一个黑屏背景,但它似乎没有读取图像或绘制它们,一些帮助将不胜感激,如果你能告诉我与我的代码有关的信息,我无法理解一般 r 模糊的答案,谢谢.

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

public class Movie extends JApplet {

    private String movName1;
    private String director1;
    private int yearMade1;
    private Image movPic1;
    private String movName2;
    private String director2;
    private int yearMade2;
    private Image movPic2;
    private String movName3;
    private String director3;
    private int yearMade3;
    private Image movPic3;
    private String movName4;
    private String director4;
    private int yearMade4;
    private Image movPic4;

    public void init() {
        MovieDis goo = new MovieDis(movPic1, movPic2, movPic3, movPic4);
        goo.setBounds(0, 0, 750, 500);
        add(goo);
    }
}

class MovieDis extends JComponent {

    private String movName1;
    private String director1;
    private int yearMade1;
    private Image movPic1;
    private String movName2;
    private String director2;
    private int yearMade2;
    private Image movPic2;
    private String movName3;
    private String director3;
    private int yearMade3;
    private Image movPic3;
    private String movName4;
    private String director4;
    private int yearMade4;
    private Image movPic4;

    public MovieDis(Image movPic1, Image movPic2, Image movPic3, Image movPic4) {
        setBackground(Color.black);
        movPic1 = Toolkit.getDefaultToolkit().createImage("Shaw.jpg");
        movPic2 = Toolkit.getDefaultToolkit().createImage("dances.jpg");
        movPic3 = Toolkit.getDefaultToolkit().getImage("Inception.jpg");
        movPic4 = Toolkit.getDefaultToolkit().getImage("Cuckoo.jpg");
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.black);
        g.fillRect(0, 0, 750, 500);
        g.drawImage(movPic1, 35, 35, 200, 200, this);
        g.drawImage(movPic2, 35, 515, 200, 200, this);
        g.drawImage(movPic3, 265, 35, 200, 200, this);
        g.drawImage(movPic4, 35, 515, 200, 200, this);
    }
}
4

2 回答 2

2

这可能不起作用的原因有很多,最明显的是

  • 您无权读取图像(文件系统或 URL)
  • URL 引用错误(因为文件的位置不是您认为的位置)

根据文件的存储位置,您有两种选择。

如果文件与 Jar 一起存储在服务器上。您将需要了解文档库参考。

所以在你的init方法中,你需要添加

URL base = getDocumentBase();
System.out.println("base = " + base); // testing only
movPic1 = getImage(base, "issue169.jpg");
movPic2 = getImage(base, "issue194.jpg");
movPic3 = getImage(base, "issue248.jpg");
movPic4 = getImage(base, "issue78.jpg");

这假定图像与 HTML 文件位于服务器上的同一目录中。您可以根据需要使用相对路径。

如果文件存储/捆绑在Jar(这可能是静态图像的首选方式),您需要使用classloader来查找它们

try {
    movPic1 = ImageIO.read(getClass().getResource("/testapplet/issue169.jpg"));
    movPic2 = ImageIO.read(getClass().getResource("/testapplet/issue194.jpg"));
    movPic3 = ImageIO.read(getClass().getResource("/testapplet/issue248.jpg"));
    movPic4 = ImageIO.read(getClass().getResource("/testapplet/issue78.jpg"));
} catch (IOException ex) {
    ex.printStackTrace();
}

我使用了这种方法,但在测试时确实遇到了一个小问题。因为我的文件被捆绑(还),小程序查看器试图将它们加载为File它无权执行的参考 - 小程序视图允许您将其设置为不受限制。

这最终导致

在此处输入图像描述

PS-我将小程序布局管理器设置为BorderLayout而不是使用绝对定位。

于 2012-08-11T01:37:06.490 回答
2

据我所知,您的图像很可能是空的或空的。看到这是 applet 代码并且您没有使用正确的 URL,如果 Toolkit 无法找到图像,它可能会返回一个标记值(宽度和高度 = -1 的图像)。不幸的是,在这种情况下 g.drawImage 不会抛出异常。请检查您的图像是否正确加载。

于 2012-08-11T00:30:24.263 回答