我在Mac上有一个java应用程序,它是在Eclipse中构建的,并使用名为osxappbundle-maven-plugin的maven插件捆绑在一起。 解压缩应用程序的dmg文件后,获取应用程序文件并将其复制到我的硬盘驱动器,我使用以下命令通过终端调用此应用程序: 打开-a“/ Full / Path / To / App / Match Player.app”--args“/ Full / Path / To / File / TEST 1.mplx”
这会正确打开应用程序 但是,执行以下命令后: 打开-a“/ Full / Path / To / App / Match Player.app”--args“/ Full / Path / To / File / TEST 2.mplx” 我的应用程序不会使用新的测试文件打开应用程序,而只是关注先前打开的应用程序的窗口 我很确定main函数不会再被调用,因为我编写了main函数,以便在每次调用时重新初始化windows。 (因此应用程序应该重新初始化)。
使用“open -n”选项打开多个应用程序不是一种选择。
答案 0 :(得分:2)
我很确定不会再次调用main函数
是的,当已经有一个应用程序运行实例时,“open”命令只是向正在运行的实例发送一个“打开文件”事件。您需要注册OpenFilesHandler才能接收此事件,并且可以从处理程序内再次调用main
。
import com.apple.eawt.*;
public class MyMainClass {
private static boolean listenerRegistered = false;
public static void main(String[] args) throws Exception {
if(!listenerRegistered) {
Application.getApplication().setOpenFileHandler(new OpenFilesHandler() {
public void openFiles(AppEvent.OpenFilesEvent evt) {
List<String> filenames = new ArrayList<String>();
for(File f : evt.getFiles()) {
filenames.add(f.getAbsolutePath());
}
MyMainClass.main(filenames.toArray(new String[filenames.size()]));
}
});
listenerRegistered = true;
}
// rest of main goes here
}
}
现在open -a "/Full/Path/To/App/Match Player.app" "/Full/Path/To/File/TEST 1.mplx"
(没有--args
)应该做正确的事。