通过脚本API进行的类型转换不起作用

时间:2019-07-12 12:01:12

标签: javascript java java-scripting-engine

我正在开发一个能够编辑视频的Java应用程序。当我考虑出售它并在以后推送更新时,对我来说,在我尝试过的脚本API的帮助下使用扩展似乎是最容易的,但是那样我就不能在javascript中使用任何HTML代码。

由于这个原因,我试图在javascript中的数组中创建颜色值,该颜色值将返回给我的Java程序,该程序将该数组转换为BufferedImage。尝试该操作时,我收到一条错误消息,但我无法弄清楚自己做错了什么。

我的Java脚本代码:

bonusFunctionality = function (imageData, frame, totalNumberFrames, width, height) {
    var offset = width*2/totalNumberFrames*frame;
    return createImage(width, height, -width+offset, imageData);
};

createImage = function (width, height, offset, originalImageData) {
    var data = [];
    for (var i = 0; i < height*width; i++) {
        //Red, Green, Blue, Alpha
        if (i + offset < 0 || i + offset >= width) {
            data[i*4] = 0;
            data[i*4+1] = 0;
            data[i*4+2] = 0;
            data[i*4+3] = 100;
        }
        data[i*4] = originalImageData[(i+offset) * 4];
        data[i*4+1] = originalImageData[(i+offset) * 4+1];
        data[i*4+2] = originalImageData[(i+offset) * 4+2];
        data[i*4+3] = originalImageData[(i+offset) * 4+3];
    }
    return data;
};
public BufferedImage[] useEffect(String inputImgPath, String inputImgExtension, int numberFrames, int width, int height) throws ScriptException, NoSuchMethodException, IOException {
        BufferedImage[] images = new BufferedImage[numberFrames];

        BufferedImage input = ImageIO.read(new File(inputImgPath));
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        ImageIO.write(input, inputImgExtension, bos);
        byte[] inputImgData = bos.toByteArray();
        ObjectOutputStream oos = new ObjectOutputStream(bos);
        for (int i = 0; i < numberFrames; i++) {
            oos.writeObject(extensionFunction.invokeFunction("bonusFunctionality", inputImgData, i, numberFrames, width, height));
            oos.flush();
            byte[] data = bos.toByteArray();
            ByteArrayInputStream bis = new ByteArrayInputStream(data);
            images[i] = ImageIO.read(bis);
        }
        return images;
    }

其中一些东西(例如extensionFunction(Type:Invocable))来自父类。如果您发现任何需要的类型,请随时询问。

我得到的错误如下:

线程“主”中的异常java.io.NotSerializableException:jdk.nashorn.api.scripting.ScriptObjectMirror     在java.base / java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185)     在java.base / java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)     在extensionSupport.ImgRetExtension.useEffect(ImgRetExtension.java:26)     在core.Main.main(Main.java:19)

0 个答案:

没有答案