Как я могу отобразить изображение в апплете?

У меня есть изображение, и я хочу отобразить его в апплете. Проблема в том, что изображение не отображается. Что-то не так с моим кодом?

Спасибо...

Вот мой код:

import java.applet.Applet;
import java.awt.*;


 public class LastAirBender extends Applet
 {

 Image aang;

 public void init()
 {

  aang = getImage(getDocumentBase(), getParameter("images.jpg"));
 }

 public void paint(Graphics g) 
 {

    g.drawImage(aang, 100, 100, this);
 }

}

person papski    schedule 16.09.2011    source источник


Ответы (3)


aang = getImage(getDocumentBase(), getParameter("images.jpg"));

Я подозреваю, что вы делаете что-то не так, и это должно быть просто:

aang = getImage(getDocumentBase(), "images.jpg");

Каково содержимое элемента HTML/апплета? Как называется изображение? Изображение находится в том же каталоге, что и HTML?

Обновление 1

Вторая (измененная) строка кода попытается загрузить файл images.jpg в тот же каталог, что и HTML.

Конечно, вам может понадобиться добавить MediaTracker для отслеживания загрузки изображения, так как метод Applet.getImage() возвращает результат немедленно (сейчас), но загружается асинхронно (позже).

Обновление 2

Попробуйте этот точный эксперимент:

Сохраните этот источник как ${path.to.current.code.and.image}/FirstAirBender.java .

/*
<applet class='FirstAirBender' width=400 height=400>
</applet>
*/
import javax.swing.*;
import java.awt.*;
import java.net.URL;
import javax.imageio.ImageIO;

public class FirstAirBender extends JApplet {

    Image aang;

    public void init() {
        try {
            URL pic = new URL(getDocumentBase(), "images.jpg");
            aang = ImageIO.read(pic);
        } catch(Exception e) {
            // tell us if anything goes wrong!
            e.printStackTrace();
        }
    }

    public void paint(Graphics g) {
        super.paint(g);
        if (aang!=null) {
            g.drawImage(aang, 100, 100, this);
        }
    }
}

Затем перейдите к подсказке и скомпилируйте код, затем вызовите средство просмотра апплета, используя имя источника в качестве аргумента.

C:\Path>javac FirstAirBender.java
C:\Path>appletviewer FirstAirBender.java
C:\Path>

Вы должны увидеть свое изображение в апплете, нарисованное в размере 100x100 от верхнего левого угла.

person Andrew Thompson    schedule 16.09.2011
comment
имя изображения просто изображения. Да, они находятся в одном каталоге, но мне просто интересно, раз вы сказали о HTML, нужно ли мне по-прежнему использовать HTML? - person papski; 16.09.2011
comment
Я просто хочу отображать только изображение в JApplet. - person papski; 16.09.2011
comment
следует предложениям @Andrew Thompson +1 - person mKorbel; 16.09.2011
comment
ошибка: javax.imageio.IIOException: не удается получить входной поток из URL-адреса! Что это значит? - person papski; 16.09.2011
comment
Что вы поняли, прочитав эти сообщения ? - person Andrew Thompson; 16.09.2011
comment
нет, теперь все в порядке .. Я уже понял, спасибо за вашу помощь ... ;-) - person papski; 16.09.2011

1) мы живем.. в 21 веке, тогда пожалуйста JApplet вместо Applet

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

public class LastAirBender extends JApplet {

    private static final long serialVersionUID = 1L;
    private Image aang;

    @Override
    public void init() {
        aang = getImage(getDocumentBase(), getParameter("images.jpg"));
    }

    @Override
    public void paint(Graphics g) {
        g.drawImage(aang, 100, 100, this);
    }
}

2) для Icon/ImageIcon лучше искать JLabel

3) пожалуйста, что getImage(getDocumentBase(), getParameter("images.jpg"));

там я буду ждать что-то вроде как

URL imageURL = this.getClass().getResource("images.jpg");
Image image = Toolkit.getDefaultToolkit().createImage(imageURL);
Image scaled = image.getScaledInstance(100, 150, Image.SCALE_SMOOTH);
JLabel label = new JLabel(new ImageIcon(scaled));
person mKorbel    schedule 16.09.2011
comment
Нужно ли удалять строку с помощью getDocumentBase()? - person papski; 16.09.2011

Что ж, вышеприведенные ответы верны. Это код, который я использовал для отображения изображения. Надеюсь, поможет:

/*
    <applet code = "DisplayImage.class" width = 500 height = 300>
    </applet>
*/

import java.applet.Applet;
import java.awt.*;

public class DisplayImage extends Applet
{
    Image img1;

    public void init(){
        img1 = getImage(getCodeBase(),"Nature.jpg" );
    }

    public void paint(Graphics g){
        g.drawImage(img1, 0,0,500,300,this);
    }

}

В приведенном выше коде мы создаем объект класса изображения и получаем изображение из местоположения, указанного кодовой базой. Затем нарисуйте изображение, используя метод drawImage. Те, кому интересно узнать значение методов getCodeBase() и getDocumentBase(), могут добавить следующий код в метод paint. На самом деле это расположение папки src в папке вашего проекта: -

    String msg;
    URL url=getDocumentBase();
    msg="Document Base "+url.toString();
    g.drawString(msg,10,20);

    url=getCodeBase();
    msg="Code Base "+url.toString();
    g.drawString(msg,10,40);

Еще одно замечание: убедитесь, что изображения и классы не имеют одинакового имени в папке src. Это мешало отображению моего изображения.

person Kushagra    schedule 09.09.2019