我已经为Mac OSx和Windows用Java编写了一个应用程序,但是我已经在Windows上开发了它。因此,我使用java.lang.reflect.*
来实现“关于”和“退出”处理程序,而不会接收到异常。
我已经将其导出为可执行Jar,并且在两种操作系统上都可以正常工作。但是,我想混淆应用程序,而我正在使用ProGaurd。我已经指定了必要的库才能在Windows上运行(rt.jar,jsse.jar,jce.jar),并且在Windows上仍然可以正常运行,但是ProGaurd告诉我,有两个 Unresolved 对类的动态引用或界面,并且混淆后的应用程序在Mac上无法正常运行(关于和退出处理程序不起作用)。
我在某处读到需要ui.jar
,因此我从Mac上复制了它,并在ProGaurd中指定了它,但这似乎并不能解决问题!任何解决方案表示赞赏...
提前致谢
更新
我现在使用AppleJavaExtensions来使用com.apple.eawt.Application
而不是反射来实现处理程序。但是,我仍然遇到完全相同的问题!这是我当前正在使用的代码:
package ap;
import com.apple.eawt.AboutHandler;
import com.apple.eawt.AppEvent;
import com.apple.eawt.AppEvent.QuitEvent;
import com.apple.eawt.Application;
import com.apple.eawt.QuitHandler;
import com.apple.eawt.QuitResponse;
import com.gui.Tabs;
public class xa implements AboutHandler, QuitHandler {
// Constructor to register/install the necessary handler's
public xa(){
Application.getApplication().setAboutHandler(this);
Application.getApplication().setQuitHandler(this);
}
// Implemented method to catch the About menu item
@Override
public void handleAbout(AppEvent.AboutEvent e) {
Tabs.switchAbout();
}
// Implemented method to catch the Quit menu item
@Override
public void handleQuitRequestWith(QuitEvent arg0, QuitResponse arg1) {
Tabs.quit();
}
}
而且我正在使用ProGuard GUI混淆我的应用程序。在底部的混淆“选项卡”中,我添加了类
ap.xa
并指定其扩展/实现AboutHandler, QuitHandler
。我还添加了com.gui.Tabs
类,但问题仍然存在。 最佳答案
也许您可以尝试Apple Java Extensions。
使用Apple Java扩展,您可以在Windows上进行开发而无需使用java.lang.reflect.*
类,并且ProGuard可能会更容易。