私はSOおよびGoogleリンクについて多くのことを読みました。
Eclipseのguiプロジェクトに画像を正しく追加する方法は、システムがそれを見つけられるように認識する方法であるとはまだ考えていません。私はCLASSPATHについていくつかの巨大なものがあることを知っていますが、おそらくこれを行うのは難しくないはずです。
私がやっていることを説明することから始めましょう...
これが私の方法です。
「/ imports」と呼ばれる「import directory」に「import wizard」(右クリック、「import」、「general」、「file」)を使用してイメージを追加します
Eclipseは、Eclipseパッケージエクスプローラーのツリービューに「resources」というフォルダーを自動的に作成します。 「参照ライブラリ」のエントリのすぐ下。
「リソース」は「参照ライブラリ」の下ではなく、ツリー内の同じレベルにあることに注意してください。
次に、次のコードを使用します。
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("/resources/image.jpg");
Image logo = ImageIO.read(input);
そして、この時点で、テストプログラムを実行すると、このエラーが発生します。
Exception in thread "main" Java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.read(Unknown Source)
at Test.main(Test.Java:17)
事前に助けてくれてありがとう!
通常のフォルダではなく、ソースフォルダに画像を配置します。つまり、プロジェクトを右クリック->新規->ソースフォルダー。そのソースフォルダーに画像を配置します。次に:
InputStream input = classLoader.getResourceAsStream("image.jpg");
パスが省略されていることに注意してください。これは、画像がパスのルートに直接あるためです。必要に応じて、ソースフォルダーの下にフォルダーを追加して、さらに細分化することができます。または、既存のソースフォルダー(通常src
と呼ばれます)の下に画像を配置できます。
Eclipseでファイルの検索にまだ問題がある場合は、次のことを試してください。
メインで次を印刷して、デフォルトの作業ディレクトリを確認します。
System.out.println("Working dir: " + System.getProperty("user.dir"));
上記の(1)では、アクセスしようとした特定のファイルの周りに次のデバッグコードを配置しました。
File imageFile = new File(source);
System.out.println("Canonical path of target image: " + imageFile.getCanonicalPath());
if (!imageFile.exists()) {
System.out.println("file " + imageFile + " does not exist");
}
image = ImageIO.read(imageFile);
何らかの理由で、システムがEclipseプロジェクトディレクトリ階層のルート(例:$)を見ていることを確認したため、「src」または他のバリアントに画像ファイルを配置するように指示する他のほとんどの投稿を無視しましたHOME/workspace/myProject)。
Src /(自動的にbin /にコピーされます)に画像があることは、Eclipse Lunaでうまくいきませんでした。
プロジェクトに画像を追加して画像を表示するのは非常に簡単です。最初に、任意のタイプの画像を含むことができるフォルダーをプロジェクトに作成します。
次に、プロジェクト->>
ビルドパスに移動->>
ビルドパスの構成->>
クラスフォルダーを追加->>
プロジェクト名の下にあるフォルダー(画像を保存するために作成したフォルダー)を選択します。
class Surface extends JPanel {
private BufferedImage slate;
private BufferedImage Java;
private BufferedImage pane;
private TexturePaint slatetp;
private TexturePaint javatp;
private TexturePaint panetp;
public Surface() {
loadImages();
}
private void loadImages() {
try {
slate = ImageIO.read(new File("images\\slate.png"));
Java = ImageIO.read(new File("images\\Java.png"));
pane = ImageIO.read(new File("images\\pane.png"));
} catch (IOException ex) {
Logger.`enter code here`getLogger(Surface.class.getName()).log(
Level.SEVERE, null, ex);
}
}
private void doDrawing(Graphics g) {
Graphics2D g2d = (Graphics2D) g.create();
slatetp = new TexturePaint(slate, new Rectangle(0, 0, 90, 60));
javatp = new TexturePaint(Java, new Rectangle(0, 0, 90, 60));
panetp = new TexturePaint(pane, new Rectangle(0, 0, 90, 60));
g2d.setPaint(slatetp);
g2d.fillRect(10, 15, 90, 60);
g2d.setPaint(javatp);
g2d.fillRect(130, 15, 90, 60);
g2d.setPaint(panetp);
g2d.fillRect(250, 15, 90, 60);
g2d.dispose();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
doDrawing(g);
}
}
public class TexturesEx extends JFrame {
public TexturesEx() {
initUI();
}
private void initUI() {
add(new Surface());
setTitle("Textures");
setSize(360, 120);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
TexturesEx ex = new TexturesEx();
ex.setVisible(true);
}
});
}
}
画像を再保存し、文字通りプロジェクトのsrcファイルを見つけて保存時に追加できます。私にとっては、netbeansにアクセスしてプロジェクトを見つけなければなりませんでしたが、それが現れたときにsrcが最後の3つのファイルを持っていました。そこに写真を保存するだけでは、クリックしないでください。うまくいくはずです。今、サイズを変更することは別の問題かもしれませんし、私は今取り組んでいます1
Eclipseで実行している場合、スクリプト内のクラスの上にマウスを移動すると、f2を押すとフォーカスを示すフォーカスダイアログが表示されるという簡単なメモがいくつかあります。
コンピューターアプリの場合は、ImageIconを使用します。そして、パスのために言う、
ImageIcon thisImage = new ImageIcon("images/youpic.png");
folder(images)を指定し、/で区切り、picファイルの名前を追加します。
これがお役に立てば幸いです。他の誰かがそれを投稿した場合、私は読み通しませんでした。だから...ええ..強化を考えました。