测试环境:windowsxp+resin3.0.22+jdk1.4
测试页面(a.jsp):
<%@ page contentType="text/html;charset=GBK" %>
<%@page import="java.awt.Rectangle,java.awt.image.BufferedImage,java.io.File,javax.imageio.ImageIO,java.awt.Toolkit,java.awt.Robot" %> <%
  try { 
  //拷贝屏幕到一个BufferedImage对象screenshot 
    BufferedImage screenshot = (new Robot()).createScreenCapture(new Rectangle(0, 0, 1024, 768)); 
    File f = new File("d:/temp.jpg"); 
  //将screenshot对象写入图像文件 
    ImageIO.write(screenshot,"jpg", f); 
  } 
  catch (Exception ex) { 
    System.out.println(ex); 
  } 
%>
问题:当直接点击 resin目录下的httpd.exe运行时,程序能够正常把当前屏幕copy生成图片temp.jpg
但是当把resin加入windows的服务后,生成的temp.jpg图片内容就是一块黑色背景.
请问加入windows的服务后,为什么会有这个问题?两者有什么区别吗?

解决方案 »

  1.   

    我试了下tomcat下也有这个问题。即tomcat如果在服务中启动的话,生成的图片也是一块黑色。如果不在服务中启动,生成的图片就是正常的。craig_wolfdon() 
    有什么属性没有设置? 
    ---------------
    答:resin安装为windows的服务只用了最简单的:httpd -install .没有设置其它属性。
    各位如果有兴趣,把这个简单的jsp运行下就能看到这个问题了。谢谢!
      

  2.   

    呵呵,在我的机子上TOMCAT中打开网页活死都是黑的,但是。直接运行JAVA文件是可以抓到的,火大,这说明JAVA环境是好的,应该是TOMCAT的问题或IE的问题,暂时还没找到具体的原因,下面这个是JAVA文件
    import java.awt.Dimension; 
    import java.awt.Rectangle; 
    import java.awt.Robot; 
    import java.awt.Toolkit; 
    import java.awt.image.BufferedImage; 
    import java.io.File; import javax.imageio.ImageIO; /******************************************************************* 
    * 该JavaBean可以直接在其他Java应用程序中调用,实现屏幕的"拍照" 
    *****************************************************/ public class GuiCamera 
    {   
        private String fileName; //文件的前缀 
        private String defaultName = "GuiCamera"; 
        static int serialNum=0; 
        private String imageFormat; //图像文件的格式 
        private String defaultImageFormat="png"; 
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();     /**************************************************************** 
         * 默认的文件前缀为GuiCamera,文件格式为PNG格式 
         ****************************************************************/ 
        public GuiCamera() { 
          fileName = defaultName; 
          imageFormat=defaultImageFormat; 
         
        }     /**************************************************************** 
         * 本构造支持JPG和PNG文件的存储 
         ****************************************************************/ 
        public GuiCamera(String s,String format) { 
         
          fileName = s; 
          imageFormat=format; 
        } 
         
        /**************************************************************** 
         * 对屏幕进行拍照 
         ****************************************************************/ 
        public void snapShot() { 
         
          try { 
          //拷贝屏幕到一个BufferedImage对象screenshot 
            BufferedImage screenshot = (new Robot()).createScreenCapture(new 
                Rectangle(0, 0, (int) d.getWidth(), (int) d.getHeight())); 
            serialNum++; 
            //根据文件前缀变量和文件格式变量,自动生成文件名 
            String name=fileName+String.valueOf(serialNum)+"."+imageFormat; 
            File f = new File(name); 
            System.out.print("Save File "+name); 
          //将screenshot对象写入图像文件 
            ImageIO.write(screenshot, imageFormat, f); 
            System.out.print("..Finished!\n"); 
          } 
          catch (Exception ex) { 
            System.out.println(ex); 
          } 
        }     public static void main(String[] args) 
        { 
            GuiCamera cam= new GuiCamera("d:\\Hello", "png");//         cam.snapShot(); 
        } 
      

  3.   

    to liaohaiying(大菜) 
    我也是调试这个程序的时候,发现这个问题的。
    等待高手解答!
      

  4.   

    是不是   Robot对象.createScreenCapture   这个方法所使用的设备号在这些操作之后被占用了呢?? 没看过这个,只是猜测。