1

setbackground の黒い画面が表示されますが、画像を読み取ったり描画したりしていないようです。また、私のコードに関する情報を教えていただければ、助けていただければ幸いです。一般的な漠然とした答えを理解するのに苦労しています。ありがとう.

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

私が見る限り、おそらくあなたの画像は null または空です。これがアプレット コードであり、適切な URL を使用していないことを確認すると、ツールキットは、画像が見つからない場合、おそらくセンチネル値 (幅と高さ = -1 の画像) を返します。残念ながら、この場合、g.drawImage は例外をスローしません。画像が正しくロードされていることを確認してください。

于 2012-08-11T00:30:24.263 に答える
2

これが機能しない理由はたくさんありますが、最も明白な理由は次のとおりです。

  • 画像を読み取る権限がありません (ファイル システムまたは URL のいずれか)。
  • URL参照が間違っています(ファイルの場所があなたが思っている場所ではないため)

ファイルの保存場所に応じて、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();
}

この方法を使用しましたが、テスト中に小さな問題が発生しました。渡されたファイルは (まだ) バンドルされているため、アプレット ビューアはそれらをFile参照としてロードしようとしましたが、実行する権限がありませんでした。アプレット ビューでは、制限なしとして設定できます。

これにより、最終的に

ここに画像の説明を入力

PS-BorderLayout絶対配置を使用するのではなく、アプレットレイアウトマネージャーを設定しました。

于 2012-08-11T01:37:06.490 に答える