我有两个不同的应用程序,一个是我用Java开发的,另一个是macOS的本机应用程序。 从现在开始,我将我的应用程序称为应用程序 A ,将另一个应用程序称为应用程序 B 。
让我尝试解释我在做什么。 当我执行 A 时,它将以编程方式启动一个applescript;此脚本基本上是一个while循环,会自动单击应用程序 B 的菜单项(通过执行此 B 读取 A 根据用户请求编写)。
出什么问题了?由于applescript是一个while循环,因此应用程序 B 很少尝试访问应用程序 A 尚未写完的文件。
TL; DR: A 写入文件,而 B 从该文件读取。
我还尝试了什么?我考虑过要启动一个Applescript,每次之后 A ,都不会启动while循环的一部分,而不是一次启动它。根据用户请求写入文件。
但是会发生什么呢?通过在while循环中使用applescript,除了 B 读取损坏的文件的极少数情况外,其他所有功能都可以正常工作。通过启动在 A 完成后仅执行一次单击以写入文件的applescript,出于某些原因, B 的GUI会在几次尝试后冻结。我猜这是因为在第一种情况下,我只启动一次ProcessBuilder
,而在第二种情况下,每次 A 写完文件,都会执行ProcessBuilder
。
所以我在想是否有一种方法可以锁定被另一个应用程序访问的文件,以使 B 会等待 A 完成文件的写入。当然,如果我能够启动AppleScript,那么每次之后 A 完成写入文件而不会冻结< strong> B ,那么我就不需要锁定文件。