簡體   English   中英

為什么NetBeans在OS X上運行我的程序,而不將其構建到JAR中?

[英]Why is NetBeans running my program on OS X, but not building it into a JAR?

tl; dr

我缺少什么依賴關系,該依賴關系允許NetBeans在內部很好地運行OS X集成程序,但無法清理並將其構建為JAR?


我正在嘗試制作一個集成到OS X中的Java程序,但我希望也將其發布到Windows和Linux上。 為此,我使用了com.apple.eawt包的實用程序類。

到目前為止,一切都很好。 我已經將菜單欄集成到OS X中,有了“首選項處理程序”和“關於處理程序”,以及所有這些有趣的東西,並且運行得很好……當我單擊在NetBeans中運行”時。 然而! 當我點擊Clean and Build時 ,我收到很多這樣的錯誤:

/my/source/path/MenuBarManager.java:3: error: package com.apple.eawt does not exist
import com.apple.eawt.AboutHandler;
/my/source/path/MenuBarManager.java:62: error: cannot find symbol
    private static class MyAboutHandler implements AboutHandler {
                                                   ^
  symbol:   class AboutHandler
  location: class MyMenuBarManager
/my/source/path/MyMenuBarManager.java:68: error: package AppEvent does not exist
        @Override public void handleAbout(AppEvent.AboutEvent ae) {
                                          ^
/my/source/path/MyMenuBarManager.java:67: error: method does not override or implement a method from a supertype <br/>
        @Override public void handleAbout(AppEvent.AboutEvent ae) {
        ^

為什么我可以在IDE中正常運行它,卻不能告訴IDE將其編譯為JAR?


嘗試修復

我嘗試通過創建一個全新的NetBeans項目,將所有源文件復制到其中並單擊“清理並構建”來完全重新創建該項目的Ajith John修復程序。 我得到了相同的結果,所以這沒有用。

即使包com.apple.eawt在運行時jar rt.jar (如果在OS X上),編譯器ct.sym在名為ct.sym的符號文件中查找該包。 該符號文件僅包含標准Java軟件包,而不包含Apple擴展名。

一種解決方案是使用javac選項-XDignore.symbol.file ,如下所示。 但是,-XD選項是非標准的且未記錄,請參見此處此處

在此處輸入圖片說明

更好的解決方案可能是以不使用非標准Apple擴展的方式重寫代碼。

NetBeans具有組織嚴密的運行功能。 如果我做對了-此函數在NetBeans進程(及其類路徑)中編譯並運行您的應用程序。 要通過“ build”命令解決編譯問題,應確保您的build-agent具有所有必需的依賴項:

  • 對於Maven-您應該只在pom.xml中添加依賴項,
  • 對於ant-您應該指定classpath來向其中添加必要的.jar。

PS包com.apple.eawt是Apple唯一的包。 如果希望在其他平台上啟動應用程序,則應使用簡單的AWT(而不是Apple EAWT)或其他常見的UI框架(例如Swing)。

我當前的解決方法是清理並運行程序( 而不是構建程序),然后將.class文件放入具有正確格式的META_INF文件夾和manifest.MF文件的.zip文件夾中。 然后,我將.zip擴展名重命名為.jar ,並使用這個黑在一起的jarfile!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM