它给了我一个黑色屏幕的setbackground, 但它似乎没有阅读图像或绘制它们, 如果你能告诉我这些信息,我们将不胜感激 关于我的代码,我很难理解一般 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);
}
}
答案 0 :(得分:2)
从我所看到的,很可能你的图像为空或空。看到这是applet代码并且您没有使用正确的URL,如果无法找到图像,Toolkit可能会返回一个sentinel值(宽度和高度为-1的图像)。不幸的是,在这种情况下,g.drawImage不会抛出异常。请检查您的图像是否正确加载。
答案 1 :(得分:2)
有很多原因可能不起作用,最明显的是
根据文件的存储位置,您有两种选择。
如果文件与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();
}
我使用了这种方法,但在测试时确实遇到了一个小问题。因为我的文件已被捆绑(但),applet查看器试图将它们作为File
引用加载,它没有权限 - applet视图允许您将其设置为不受限制。
这最终导致了
PS-我将applets布局管理器设置为BorderLayout
,而不是使用绝对定位。