如何在Java程序中接收和响应Apple Events?

时间:2013-07-11 15:28:20

标签: java applescript

我想让我的Java swing应用程序可以编写。

我不是只想回应打开,打印等预定义事件。

如果AppleEvents通过Listener界面出现,那将是最好的。

编辑: 对我对Apple Events的理解的一些解释可能有助于证明我不是一个懒鬼。 :-) 我在这里编写的代码演示了如何响应许多预定义的事件:

https://github.com/joelkevinjones/snippets/blob/e7b10128156bcc213f8c24dbda464ad09a8a1e33/Java/AppleSpecific/AppleLookAndFeelDemo.java

使用非Java界面将Apple事件传递到常规应用程序。到目前为止,我没有提供用于获取这些事件的Java方法。 Apple Event技术包括编写“术语”文件,这些文件以人类可读的形式描述应用程序响应的事件以及以编程方式构建Apple Events的四字母代码。创建javax.script.ScriptEngine的实例不能做我想要的。它允许Java程序启动调用AppleScript,但没有办法让AppleScript调用Java程序。

为了澄清,是否已经编写了库或示例,说明如何:

  1. 将某些Java方法标记或注册为AppleScript方法和/或AppleScript类的“可见”。

  2. 如果没有声明性方法,是否有一种Java方法用于捕获发送到Java应用程序的Apple事件?如果事件只是作为一个字节数组返回,那么事件可以被解析并转换为Swing事件,并且可以使用反向过程将结果返回给发送Apple事件的应用程序。

  3. 或者需要编写大量JNI代码吗?

1 个答案:

答案 0 :(得分:0)

实现com.apple.eawt包中提供的Application和ApplicationAdaptor类。通过在ApplicationAdaptor类中实现事件处理程序,您的应用程序可以生成和处理基本事件,如打印和打开。有关这两个类的信息,请参见J2SE 5.0 Apple Extensions Reference。

Java SE 6还允许您使用javax.script API调用AppleScript。下面的清单提供了此功能的示例实现。

public static void main(String[] args) throws Throwable {
    String script = "say \"Hello from Java\"";

    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("AppleScript");
    engine.eval(script);
}

来源:http://qery.us/3xr