1

jpeg を JFrame に表示しようとしていますが、一部の画像ファイルは機能し、他の画像ファイルは機能しないことに気付きました。私は Eclipse を使用しており、すべてのイメージはプロジェクトのルート ディレクトリにあります。Debugger を実行してブレークポイントに到達すると、表示されない画像の imageheight と imagewidth が -1 と報告されます。表示される画像の正しい値を報告します。

最初は画像サイズに関係があると思っていましたが、mspaint で解像度をいじってみると、そうではないことがわかりました。

これまでの私のコードは次のとおりです。

import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import javax.imageio.*;
import java.io.File;

public class icon {

    public static void main(String[] args) {
        constructVNCForm();
    }

public static void constructVNCForm() {
        //Vars for GUI and essential layout code
        final JFrame frame = new JFrame("This should be on top");
        frame.setSize(800, 640);
        Container content = frame.getContentPane();
        frame.setVisible(true);

        //image code here:
        ImageIcon image = new ImageIcon("trial4.jpg");
        //ABOVE WORKS

        JLabel imageLabel = new JLabel(image);
        FlowLayout flow = new FlowLayout(FlowLayout.CENTER);
        //add the image to the frame
        content.add(imageLabel);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        content.setLayout(flow);
    }
}

ImageIcons で何か問題がありましたか? 私の jpeg はすべて 300x300 未満のさまざまなサイズです。私はJavaが初めてなので、私のコードについて何か提案があればアドバイスしてください。

4

1 に答える 1

2

いくつかのさまざまなサイズの画像でテストしたところ、以下は正常に機能します。通常、setVisible(true)メソッドは最後に呼び出す必要があります。

public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame("This should be on top");
                frame.setSize(800, 640);
                ImageIcon image = new ImageIcon("someImage.jpg");
                JLabel imageLabel = new JLabel(image);
                FlowLayout flow = new FlowLayout(FlowLayout.CENTER);
                frame.getContentPane().add(imageLabel);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(flow);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
于 2012-12-09T14:21:00.783 に答える