我已经为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可能会更容易。

10-01 05:33
查看更多