Java-апплет не работает в браузере - используется файл изображения - PullRequest
1 голос
/ 25 января 2012

У меня есть Java-апплет, который демонстрирует некоторые фильтры.У меня есть предопределенный путь для примера изображения, и пользователь может выбрать собственную картинку.

Я не могу использовать новый файл, потому что я работаю в браузере и не имею доступа к хранилищу пользователей.Поэтому я использую байтовый массив для хранения данных моего изображения, которые были обрезаны и изменены с помощью библиотеки Thumbnailator:

public byte[] resize(String filepath) throws IOException{
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();

        this.setBackground(Color.RED);
//      System.out.println("public File resize(String filepath)...");

        Thumbnails.of((new URL(filepath)))
        .size(256, 256)
        .outputQuality(1.0f)
        .outputFormat("jpg")
        .toOutputStream(outStream);

        byte[] bosArray = null; 
        bosArray = outStream.toByteArray();

        return bosArray;
    }

, которая является вызовом resize () в моей функции init ():

try {
            if (ONLINE){
                String fname = FILENAME;
                if(getCodeBase()!=null)
                    fname = getCodeBase() + FILENAME;

                input = resize(fname);
            } 
            else {
                inputF = resize(new File(FILENAME));
            }

        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

и FILENAME определяется как поле:

private static final String FILENAME = "mountains.png";

в другом классе ImagePanel. Я передаю байтовый массив в BufferedImage:

public class ImagePanel extends JScrollPane {

private BufferedImage img;
private int width;
private int height;
private int[] histo;
private int[] normHisto; // normalized histogram
private int histogramHeight = 256;
private double variance;
private double expectation;

private int maxValueInHisto = 0;

/**
 * draw the image by using the stored BufferedImage
 */
public void paint(Graphics g) {
    g.drawImage(img, 0, 0, null);
}

.....

public ImagePanel(byte[] input) {

        try {
            //convert byte array back to BufferedImage
            InputStream in = new ByteArrayInputStream(input);
            img = ImageIO.read(in);

        } catch (IOException e) {
        }

        updateValues();
        this.setSize(width, height);
    } 

И все работает в программе просмотра Eclipse, но в браузере ... ничего не происходит.Он загружает апплет и ничего не показывает даже без сообщения об ошибке.

Если я закомментирую все и оставлю только инициализацию апплета и установлю цвет фона -> это работает.Так что это означает, что мой HTML-код должен быть в порядке

<applet width="1000" height="1000" code="filterpackage.mainView.class" archive="Thumbnailator-0.3.10-all.jar"/>  

Я проверил его в автономном режиме с Xampp и онлайн в Chrome, Safari, Firefox, но ничего не происходит, нет ошибок, но нет панели, нет графического интерфейса ... ничего.

Знаете, что не так?Или у вас есть совет, что я могу попробовать?

Было бы замечательно, если бы кто-нибудь мог помочь мне, я потратил так много времени до сих пор, и я не могу найти решение: (

1 Ответ

0 голосов
/ 25 января 2012

если вы запускаете апплет с локального жесткого диска, код, подобный

getCodeBase() + FILENAME

, определенно возвращает путь к локальному файлу апплета, такой как (в случае Windows)

файл: C: /.../...

Итак, file: протокол не является протоколом http: , что может вызвать проблему с вашим net изображение для загрузки по указанному пути ... Более того, вы говорите, что у вас есть неподписанный апплет ...

В качестве простого способа вы должны поместить апплет в папку веб-приложения Tomcat и запуститьэто так

http://localhost:8080/myappletpackage/applet.html

и т. д.

Если у вас есть дополнительные детали вопроса, оставьте комментарий

Отчет, который поможет

Удачи

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