如何将java代码嵌入jython脚本。

如何将java代码嵌入jython脚本。,java,jython,Java,Jython,我制作了这个beanShell脚本,它通过按按钮来获取递增的屏幕截图,现在我正试图找出如何在Jython中使用Java来获取实际的屏幕截图(因为它是跨平台的) 但是我做得不是很好,我想知道是否有人可以告诉我如何将Java部分插入Jython部分(我已经准备好gui和事件——请参见下面的内容) 这是Java部分… Dimension scr = Toolkit.getDefaultToolkit().getScreenSize(); Robot robot = new Robot(); Recta

我制作了这个beanShell脚本,它通过按按钮来获取递增的屏幕截图,现在我正试图找出如何在Jython中使用Java来获取实际的屏幕截图(因为它是跨平台的)

但是我做得不是很好,我想知道是否有人可以告诉我如何将Java部分插入Jython部分(我已经准备好gui和事件——请参见下面的内容)

这是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"));
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
这是整个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);
这是我到目前为止使用的Jython脚本…

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"));
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

谢谢:)将该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
  }
}
记住编译它并使它在应用程序的类路径上可用

然后,通过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')

您知道在上面的代码片段中如何使用JDK中的
JButton
JFrame
?这是同样的事情。

在公共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
  }
}
记住编译它并使它在应用程序的类路径上可用

然后,通过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')

您知道在上面的代码片段中如何使用JDK中的
JButton
JFrame
?这是一样的。

如果@Leonel的答案解决了你的问题,你应该接受他的答案。点击他答案旁边的绿色勾号:)如果@Leonel的答案解决了你的问题,你应该接受他的答案。单击他答案旁边的绿色勾号:)