Изображение не отображается в Java-апплете - PullRequest
0 голосов
/ 23 марта 2012

Прежде чем вы скажете, что этот вопрос был задан, я знаю, и я прочитал здесь 4 или 5 таких же вопросов, но ни один не помог.

Я пытался использовать getdocumnetbase, getcodebase, буферизованные изображения по сравнению с просто изображениями, и все, с чем я сталкивался до сих пор.Ничто не помогает моей ситуации.

Моя проблема в том, что при запуске апплета изображение не отображается.Я добавил кнопку к апплету, чтобы увидеть, отображается ли он, но на самом деле это не так, если я не наведу на него курсор или не изменим размер окна.

единственное, что сейчас делает приложение, - это показывает изображение и кнопку, ноэто не работает.Итак, я заблудился.

Вот код:

public void init() {

    JPanel panel = new JPanel()
    {
        public void paintComponent(Graphics g)  
        {
            BufferedImage img = null;
            try {
                img = ImageIO.read(new File("..\\gifs\\Assembled.jpg"));
            } catch (IOException e) {
                e.printStackTrace();
            }
            System.out.println("inside JPanel");
            g.drawImage(img, 0, 0, this);

            super.paintComponent(g); 
        }
    };  

    JButton j = new JButton("hi");
    panel.add(j);
    add(panel);

addMouseListener(this);
repaint();
}

спасибо.

А теперь, когда вы проголосовали за это (и не помогло мне), давайте посмотримесли кто-то действительно может помочь.

public void init () {

    JPanel panel = new JPanel(){

    public void paintComponent(Graphics g)  
    {
         Image i = null;
        try {
            i = getImage(new URL(getCodeBase(), "../gifs/Assembled.jpg"));
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("inside JPanel");
        g.drawImage(i, 0, 0, this);

        //super.paintComponent(g); 
    }
    };



    this.setLayout(new BorderLayout());
    panel.setSize(500,500);
    add(panel, BorderLayout.CENTER); 
    addMouseListener(this);
    //repaint();
}

Я редактировал код, но все равно ничего не работает.Изображение найдено и загружено просто отлично, но оно не отображается, если я не изменю размеры апплета.Другими словами, изображение отображается только тогда, когда оно масштабируется, а не в другое время.Теперь, что вызвало бы это?Да, и это только показывает, если я уберу вызов supper.paintComponent (g);.

Да, и ваши ссылки не помогли увидеть, как я пробовал ответы, прежде чем опубликовать это, чтобы начатьс.

1 Ответ

2 голосов
/ 23 марта 2012

Апплеты обслуживаются веб-сервером. Это веб-браузер, который загружает код апплета и запускает его. Итак, Applets физически работает на той же машине, на которой работает веб-браузер.

Следующая строка

img = ImageIO.read(new File("..\\gifs\\Assembled.jpg"));

ожидает, что файл будет присутствовать в файловой системе локального диска компьютера, на котором работает веб-браузер, относительно рабочего каталога JVM, выполняемого веб-браузером. не указывает ни на файл на веб-сервере, ни на файл, упакованный в JAR-файл апплета, если таковой имеется. Вы, конечно, можете не ожидать, что у конечного пользователя есть конкретный файл образа, уже подготовленный в локальной файловой системе диска.

В зависимости от того, где находится файл на самом деле , вам необходимо изменить эту часть.

Если он действительно хранится на веб-сервере относительно URL-адреса, с которого был загружен апплет (то есть его кодовая база ), то вам нужно вместо этого получить файл по URL-адресу.

img = ImageIO.read(new URL(getCodeBase(), "gifs/Assembled.jpg"));

Представьте, что апплет обслуживается http://example.com/contextname/applet.jar,, тогда в приведенном выше примере предполагается, что изображение доступно для http://example.com/contextname/gifs/Assembled.jpg.

Или, если он на самом деле упакован в файл JAR апплета, вам нужно вместо этого получить файл по classpath. Представьте, что вы сохранили его в /META-INF/gifs/Assembled.jpg файла JAR апплета, затем вам нужно получить его по пути классов следующим образом:

img = ImageIO.read(getClass().getResourceAsStream("/META-INF/gifs/Assembled.jpg"));

Кстати, файл JPG не является файлом GIF. Я бы предложил переименовать «gifs» в «images» или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...