【问题标题】:PrintScreen in java only working when main?java中的PrintScreen仅在main时工作?
【发布时间】:2014-03-04 10:32:47
【问题描述】:

我一直在尝试将此代码添加到我的项目中:

public static void Save() throws HeadlessException, AWTException, IOException
{
    Toolkit tk = Toolkit.getDefaultToolkit();
    Dimension Dim = tk.getScreenSize();
    Rectangle screenRect = new Rectangle(Dim);
    Robot r = new Robot();
    BufferedImage screenCapturedImage = r.createScreenCapture(screenRect);
    DateFormat dateFormat = new SimpleDateFormat("yyyy MM dd HH:mm:ss");
    Date date = new Date();
    String FileName = dateFormat.format(date);
    ImageIO.write(screenCapturedImage, "png", new File("/home/caio/Desktop/"+FileName+".png"));
}

它给了我这个错误:

Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: RoboCore.Print.Save
    at Core.Start.main(Start.java:23)
Java Result: 1

我想调用这个方法在我的屏幕上打印结果,但是这段代码不起作用,因为它不是 main 方法,对我来说似乎很奇怪......

【问题讨论】:

  • 当您尝试从除 main 以外的任何地方调用该方法时是否遇到任何错误?
  • 你怎么调用这个方法不起作用?
  • “不会工作”是什么意思?
  • throws Exception:不好。请替换为特定的例外情况。
  • 它给我一个错误,除非它是一个主要方法:线程“main”中的异常 java.lang.RuntimeException:无法编译的源代码 - 错误的符号类型:RoboCore.Print.Save at Core.Start.main (Start.java:23) Java 结果:1

标签: java screenshot javax.imageio


【解决方案1】:

我已经尝试编译和运行您的代码,从main 调用它时我没有遇到任何问题:

public static void main(String[] args) {
   try {
      Save();
   } catch (Exception e) {
      // Handle the exception
   }
}

【讨论】:

  • 我从 main 调用只是为了进行测试,但该方法实际上是稍后使用来自 UDP 服务器的用户输入调用的
  • @CaioPetrelli 很有趣,请分享更多/相关的代码。
  • 它会保存图像吗?因为它看起来像 try catch 子句停止了错误但不保存图像
  • @CaioPetrelli 是的,它确实正确截取了屏幕截图。我不确定你打电话给Save() 的更大背景,所以如果不更新你的Q,我们很难提供进一步的帮助。
  • 所以它获取一个服务器 UDP 数据包并将其返回给一个类,检查服务器是否接收到字符串“TakeScreenShot”而不是调用该方法
【解决方案2】:

public static void main(String args[])

{

 //remaining code write here;

}

【讨论】:

    【解决方案3】:
    public static void save() throws AWTException, IOException
    {
            Toolkit tk = Toolkit.getDefaultToolkit();
        Dimension Dim = tk.getScreenSize();
        Rectangle screenRect = new Rectangle(Dim);
        Robot r = new Robot();
        BufferedImage screenCapturedImage = r.createScreenCapture(screenRect);
        Format dateFormat = new SimpleDateFormat("yyyy-MM-dd HH_mm_ss");
        Date date = new Date();
        String FileName = dateFormat.format(date);
    
        ImageIO.write(screenCapturedImage, "png", new File("/home/caio/Desktop/" + FileName + ".png"));
        }
    

    试试对我有用的代码。

    您的问题出在 ImageIO.write 方法中,您在不需要的地方添加了“哪里”

    我所做的只是将“/home/caio/Desktop/”+FileName+“.png”改为“/home/caio/Desktop/”+ FileName +“.png”

    日期格式

    然后调用它

    public static void main(String[] args)
    {
       try
       {
           save();
       }
       catch(Exception e)
       {
           System.out.println(e);
       }
    }
    

    【讨论】:

    • 这只是忽略了他希望文件名基于日期的事实......
    • 对不起,我看了看,将日期更改为 yyyy.mm.dd hh.mm.ss 格式,然后将 ImageIo.write 更改为“目录 + 文件名 + .png”
    • 我已经解决了所有问题,现在应该可以正常工作了。祝你好运
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 2014-12-29
    相关资源
    最近更新 更多