Java applet在浏览器中不起作用 - 使用图像文件

时间:2012-01-25 01:07:46

标签: java applet

我有一个java applet,它演示了一些过滤器。我有一个示例图像的预定义路径,用户可以选择自己的图片。

我无法使用新文件,因为我在浏览器中工作并且无法访问用户存储。所以我使用一个字节数组来存储我的图像数据,使用库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;
    }

这是在我的init()中调用resize():

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的applet查看器中运行,但在浏览器中......没有任何反应。它加载applet并且甚至没有显示任何错误消息。

如果我评论所有内容并仅保留applet的init并设置背景颜色 - >有用。这意味着我的HTML代码应该没问题

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

我使用Xampp离线测试并在Chrome,Safari,Firefox中进行了在线测试,但没有任何反应,没有错误,但没有面板,没有GUI ..没有。

你知道什么是错的吗?或者你有一个我可以尝试的小费吗?

如果有人可以帮助我我会花很多时间直到现在并且我找不到解决方案会很棒:(

1 个答案:

答案 0 :(得分:0)

如果您从本地硬盘驱动器运行applet,则需要

这样的代码
getCodeBase() + FILENAME

肯定会返回一个本地applet文件路径,如(在windows情况下)

  

file:C:/ ... / ...

所以文件协议不是 http:协议,因此可能导致 net 图像的问题根据上述说法下载路径......而且,你说你有未签名的小程序......

作为一种简单的方法,您应该将applet放在Tomcat webapp文件夹中并以这种方式运行它

  

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

如果您还有其他问题,请发表评论

报告帮助

祝你好运