简体   繁体   English

如何将Java代码嵌入到jython脚本中。

[英]How to embed java code to a jython script.

I made this beanShell script that takes incrementing screenshots by button press, and am now trying to figure out how to do this in Jython using Java to take the actual screenshot (because it's cross platform). 我制作了这个beanShell脚本,该脚本通过按按钮来增加屏幕截图,现在试图弄清楚如何在Jython中使用Java来获取实际的屏幕截图(因为它是跨平台的)。

I'm not doing very well though and was wondering if someone could show me how to insert the Java part in to the Jython part (I have the gui and event in place -- see below)? 我的表现不是很好,并且想知道是否有人可以向我展示如何将Java部分插入Jython部分(我已经安装了gui和event -见下文)?

This is the Java Part... 这是Java部分...

Dimension scr = Toolkit.getDefaultToolkit().getScreenSize();
Robot robot = new Robot();
Rectangle rect = new Rectangle(0, 0, scr.width, scr.height);
BufferedImage image = robot.createScreenCapture(rect);
ImageIO.write(image, "jpeg", new File("Captured" + c + ".jpg"));

This is the whole beanShell script 这是整个beanShell脚本

import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;  
import java.io.File;
import java.io.IOException;

int c = 0; // image counter

buttonHandler = new ActionListener() {
  actionPerformed( this ) {

  Dimension scr = Toolkit.getDefaultToolkit().getScreenSize();

  // Allocate a Robot instance, and do a screen capture
  Robot robot = new Robot();
  Rectangle rect = new Rectangle(0, 0, scr.width, scr.height);
  BufferedImage image = robot.createScreenCapture(rect);

  // Save the captured image to file with ImageIO (JDK 1.4)
  ImageIO.write(image, "jpeg", new File("Captured" + c + ".jpg"));
  c++; 
  }
};

button = new JButton("Click to save incrementing screenshots to this app's location");
button.addActionListener( buttonHandler );
// JLabel label1 = new JLabel("hello");
frame(button);

This is the Jython script I have so far... 这是我到目前为止拥有的Jython脚本...

from javax.swing import JButton, JFrame
from java.awt import Toolkit
from java.awt.event import KeyEvent;
from java.awt.image import BufferedImage;
from javax.imageio import ImageIO;    
from java.io import File, IOException

c = 0 

frame = JFrame(
    'App Title', 
    defaultCloseOperation = JFrame.EXIT_ON_CLOSE, 
    size = (450, 60)
)


def change_text(event):
    global c
    ...
    // Java part
    ...
    c = c + 1


button = JButton(
    "Click to save incrementing screenshots to this app's location",
    actionPerformed=change_text
)

frame.add(button)
frame.visible = True

Thanks :) 谢谢 :)

Wrap that snippet of Java code in a public Java class: 将这段Java代码片段包装在公共Java类中:

package com.mycompany;
public class ScreenshotEngine {
  public void takeScreenshot(String filename) {
    // Code that actually takes the screenshot and saves it to a file
  }
}

Remember to compile it and make it available on the class path of your application. 记住要对其进行编译,并使其在应用程序的类路径中可用。

Then, from the jython script, you can use it just like any other Java class. 然后,可以从jython脚本中像使用其他任何Java类一样使用它。

# Using the fully qualified name of the class
engine = com.mycompany.ScreenshotEngine()
engine.takeScreenshot('/tmp/sc1.png')

# You can also use import to shorten class names
from com.mycompany import ScreenshotEngine
engine = ScreenshotEngine()
engine.takeScreenshot('/tmp/sc2.png')

You know how you used JButton and JFrame from the JDK, in the snippets above ? 您知道在上面的代码片段中如何使用JDK中的JButtonJFrame吗? That's the same thing. 那是同一回事。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM