Java Eclipse-从servlet将GIF保存到文件时出现问题

Java Eclipse-从servlet将GIF保存到文件时出现问题,java,gif,animated-gif,javax.imageio,fileoutputstream,Java,Gif,Animated Gif,Javax.imageio,Fileoutputstream,我在EclipseMars中制作一个简单的动画gif作为一个任务,任务的一部分是用户应该能够通过网页以某种方式影响动画,因此必须在servlet中制作。因此,我为用户创建了输入参数,以影响在黑色背景上“落下”的7个移动矩形的颜色。无论如何,问题是,当我运行代码时,由于某种原因,它不会将gif保存到FileOutputStream,但不会给出错误消息或任何东西。我在一个测试版本中创建了另一个动画,用户无法影响颜色,然后它工作得非常好。文件是超时保存的,因此我使用相同的方法将其保存在servlet中

我在EclipseMars中制作一个简单的动画gif作为一个任务,任务的一部分是用户应该能够通过网页以某种方式影响动画,因此必须在servlet中制作。因此,我为用户创建了输入参数,以影响在黑色背景上“落下”的7个移动矩形的颜色。无论如何,问题是,当我运行代码时,由于某种原因,它不会将gif保存到FileOutputStream,但不会给出错误消息或任何东西。我在一个测试版本中创建了另一个动画,用户无法影响颜色,然后它工作得非常好。文件是超时保存的,因此我使用相同的方法将其保存在servlet中,但由于某些原因,它无法工作。这是我的密码:

    import java.awt.*;
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintWriter;
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import net.jmge.gif.Gif89Encoder;

@WebServlet("/Animation")
public class Animation extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Animation() {
        super();
    }

    static void drawFrame(Graphics2D g, int frame, Color c1, Color c2, Color c3, Color c4, Color c5, Color c6, Color c7){
        g.setColor(Color.black);
        g.fillRect(0, 0, 150, 150);
        g.setColor(c1);
        g.fillRect(0,8*frame-20,50,20);
        g.setColor(c2);
        g.fillRect(50,8*frame-20,50,20);
        g.setColor(c3);
        g.fillRect(50,8*frame-40,50,20);
        g.setColor(c4);
        g.fillRect(50,8*frame-60,50,20);
        g.setColor(c5);
        g.fillRect(50,8*frame-80,50,20);
        g.setColor(c6);
        g.fillRect(50,8*frame-100,50,20);
        g.setColor(c7);
        g.fillRect(50,8*frame-120,50,20);
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        if (request.getParameter("c1") == null){
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<form>");
            out.println("Color 1: <input name='c1' value='1FEA00'/><br>");
            out.println("Color 2: <input name='c2' value='FFFF00'/><br>");
            out.println("Color 3: <input name='c3' value='FF9000'/><br>");
            out.println("Color 4: <input name='c4' value='FF0000'/><br>");
            out.println("Color 5: <input name='c5' value='F000FF'/><br>");
            out.println("Color 6: <input name='c6' value='9600FF'/><br>");
            out.println("Color 7: <input name='c7' value='0000FF'/><br>");
            out.println("<input type = 'submit'/>");
            out.println("</form>");

        }else{
            Color c1 = new Color(Integer.parseInt(request.getParameter("c1"),16));
            Color c2 = new Color(Integer.parseInt(request.getParameter("c2"),16));
            Color c3 = new Color(Integer.parseInt(request.getParameter("c3"),16));
            Color c4 = new Color(Integer.parseInt(request.getParameter("c4"),16));
            Color c5 = new Color(Integer.parseInt(request.getParameter("c5"),16));
            Color c6 = new Color(Integer.parseInt(request.getParameter("c6"),16));
            Color c7 = new Color(Integer.parseInt(request.getParameter("c7"),16));

            try {
                response.setContentType("image/gif");
                Gif89Encoder genc = new Gif89Encoder();
                FileOutputStream out = new FileOutputStream("animation1.gif");
                for(int i=0;i<7;i++)
                {
                    BufferedImage image = new BufferedImage(700,100, BufferedImage.TYPE_INT_ARGB);
                    Graphics2D g = image.createGraphics();
                    drawFrame(g,i,c1,c2,c3,c4,c5,c6,c7);
                    genc.addFrame(image);
                    g.dispose();
                    ImageIO.write(image, "gif", response.getOutputStream());
                }
                genc.setUniformDelay(10);
                genc.setLoopCount(0);
                genc.encode(out);
                out.close();
            }catch(Exception e){
                System.err.println(e);
            }
        }
    }
}
import java.awt.*;
导入java.awt.Color;
导入java.awt.Graphics2D;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.io.PrintWriter;
导入javax.imageio.imageio;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入net.jmge.gif.Gif89Encoder;
@WebServlet(“/Animation”)
公共类动画扩展HttpServlet{
私有静态最终长serialVersionUID=1L;
公共动画(){
超级();
}
静态空心画框(图形2D g、内部画框、颜色c1、颜色c2、颜色c3、颜色c4、颜色c5、颜色c6、颜色c7){
g、 设置颜色(颜色为黑色);
g、 fillRect(0,0,150,150);
g、 setColor(c1);
g、 fillRect(0,8*帧-20,50,20);
g、 setColor(c2);
g、 fillRect(50,8*frame-20,50,20);
g、 setColor(c3);
g、 fillRect(50,8*frame-40,50,20);
g、 setColor(c4);
g、 fillRect(50,8*frame-60,50,20);
g、 setColor(c5);
g、 fillRect(50,8*frame-80,50,20);
g、 setColor(c6);
g、 fillRect(50,8*frame-100,50,20);
g、 setColor(c7);
g、 fillRect(50,8*frame-120,50,20);
}
public void doGet(HttpServletRequest请求,HttpServletResponse响应)抛出ServletException,IOException{
if(request.getParameter(“c1”)==null){
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
out.println(“”);
out.println(“颜色1:
”; out.println(“颜色2:
”; out.println(“颜色3:
”; out.println(“颜色4:
”; out.println(“颜色5:
”; out.println(“颜色6:
”; out.println(“颜色7:
”; out.println(“”); out.println(“”); }否则{ 颜色c1=新颜色(Integer.parseInt(request.getParameter(“c1”),16)); Color c2=新颜色(Integer.parseInt(request.getParameter(“c2”),16)); Color c3=新颜色(Integer.parseInt(request.getParameter(“c3”),16)); 颜色c4=新颜色(Integer.parseInt(request.getParameter(“c4”),16)); Color c5=新颜色(Integer.parseInt(request.getParameter(“c5”),16)); Color c6=新颜色(Integer.parseInt(request.getParameter(“c6”),16)); Color c7=新颜色(Integer.parseInt(request.getParameter(“c7”),16)); 试一试{ response.setContentType(“image/gif”); Gif89Encoder genc=新的Gif89Encoder(); FileOutputStream out=新的FileOutputStream(“animation1.gif”);
对于(int i=0;iSee)或者为什么要创建多个GIF?您正在使用
ImageIO将每个帧存储在循环中,并将servlet响应作为完整的独立文件写入。写入
,但写入另一个(动画)使用
Gif89Encoder
写入文件。这是有意的吗?请参阅或为什么要创建多个gif?使用
ImageIO将每个帧存储在循环中,将servlet响应作为完整的独立文件写入。写入
,但使用
Gif89Encoder
将另一帧(动画)写入文件。这是有意的吗?