Проблемы при создании приложения Java 8 для OSX - PullRequest
0 голосов
/ 21 марта 2020

Я управлял проектом с открытым исходным кодом, написанным на Java (1.6), и в последнее время многие пользователи OSX сообщают о проблемах с более новой OSX, не поддерживающей Java 6. У меня нет реального опыта работы с OSX и ее нюансами и идиосинкразии. Но я начал изучать обновление до Java 8 и прочитал, что мне нужно заменить jarbundler на appbundler, и я сделал это. Однако теперь мое приложение запускается, и на панели задач появляется значок, но окно не отображается. Я пытался заставить его показать диалоговое окно при запуске, и это прекрасно работает, просто мой главный JFrame никогда не показывает. Кроме того, главное меню, которое появляется в верхнем левом углу, вообще не мое, оно имеет несколько странных опций, которые точно не мои.

Here's the screenshot with the weird menu

Вот задача bundleapp

<bundleapp 
    outputdirectory="${build.dir}" 
    name="DIYLC" 
    jvmrequired="1.8"
    copyright="Branislav Stojkovic, a.k.a. bancika"
    displayname="DIY Layout Creator" 
    identifier="org.diylc.App" 
    shortversion="${diylc.version}"
    applicationCategory="public.app-category.graphics-design"
    icon="diylc.icns"
    mainclassname="${main.class}">
    <classpath file="${jar.dir}\diylc.jar" />
    <classpath file="${jar.dir}\lib\*.jar" />
    <classpath file="${jar.dir}\library\*.jar" />
    <option value="-splash:splash.png" />
    <option value="-Xms512m" />
    <option value="-Xmx2048m" />
    <option value="-Dorg.diylc.scriptRun=true" />
    <option value="-Dfile.encoding=UTF-8" />
    <option value="-Dcom.apple.macos.use-file-dialog-packages=true"/>
    <option value="-Dcom.apple.macos.useScreenMenuBar=true"/>
    <option value="-Dapple.awt.application.name=DIY Layout Creator"/>
    <option value="-Dcom.apple.smallTabs=true"/>            
    <option value="-Xdock:name=DIY Layout Creator"/>
    <option value="-Xdock:icon=Contents/Resources/diylc.icns"/>
</bundleapp>

это файл Info.plist, сгенерированный в процессе

<?xml version="1.0" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>JavaAppLauncher</string>
<key>CFBundleIconFile</key>
<string>diylc.icns</string>
<key>CFBundleIdentifier</key>
<string>org.diylc.App</string>
<key>CFBundleDisplayName</key>
<string>DIY Layout Creator</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>DIYLC</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>3.57.0</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>NSHumanReadableCopyright</key>
<string>Branislav Stojkovic, a.k.a. bancika</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.graphics-design</string>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
<key>JVMVersion</key>
<string>1.8</string>
<key>JVMMainClassName</key>
<string>org.diylc.DIYLCStarter</string>
<key>CFBundleDocumentTypes</key>
<array>
</array>
<key>LSArchitecturePriority</key>
<array>
</array>
<key>LSEnvironment</key>
<dict>
<key>LC_CTYPE</key>
<string>UTF-8</string>
</dict>
<key>JVMOptions</key>
<array>
<string>-splash:splash.png</string>
<string>-Xms512m</string>
<string>-Xmx2048m</string>
<string>-Dorg.diylc.scriptRun=true</string>
<string>-Dfile.encoding=UTF-8</string>
<string>-Xdock:name=DIY Layout Creator</string>
<string>-Xdock:icon=Contents/Resources/diylc.icns</string>
</array>
<key>JVMDefaultOptions</key>
<dict>
</dict>
<key>JVMArguments</key>
<array>
</array>
</dict>
</plist>

в качестве ссылки, вот старый Info.plist, который работает с Java 6

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<plist version="1.0">
  <dict>
    <key>CFBundleName</key>
    <string>DIYLC</string>
    <key>CFBundleShortVersionString</key>
    <string>3.57.0</string>
    <key>CFBundleAllowMixedLocalizations</key>
    <string>false</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleExecutable</key>
    <string>JavaApplicationStub</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleIconFile</key>
    <string>diylc.icns</string>
    <key>CFBundleIdentifier</key>
    <string>org.diylc</string>
    <key>NSHumanReadableCopyright</key>
    <string>bancika (diy-fever.com)</string>
    <key>Java</key>
    <dict>
      <key>MainClass</key>
      <string>org.diylc.DIYLCStarter</string>
      <key>JVMVersion</key>
      <string>1.3+</string>
      <key>ClassPath</key>
      <array>
        <string>$JAVAROOT/diylc.jar</string>
        <string>$JAVAROOT/lib\app-framework.jar</string>
        <string>$JAVAROOT/lib\balloontip-1.2.4.1.jar</string>
        <string>$JAVAROOT/lib\commons-compiler-3.0.6.jar</string>
        <string>$JAVAROOT/lib\diylc-core.jar</string>
        <string>$JAVAROOT/lib\iText-2.1.7.jar</string>
        <string>$JAVAROOT/lib\janino-3.0.6.jar</string>
        <string>$JAVAROOT/lib\java-http-proxy.jar</string>
        <string>$JAVAROOT/lib\jep-2.4.1.jar</string>
        <string>$JAVAROOT/lib\jettison-1.0.1.jar</string>
        <string>$JAVAROOT/lib\junit-4.7.jar</string>
        <string>$JAVAROOT/lib\log4j-1.2.15.jar</string>
        <string>$JAVAROOT/lib\poi-3.5-FINAL-20090928.jar</string>
        <string>$JAVAROOT/lib\swing-framework.jar</string>
        <string>$JAVAROOT/lib\xstream-1.4.3.jar</string>
        <string>$JAVAROOT/library\main.jar</string>
      </array>
      <key>VMOptions</key>
      <string>splash:splash.png -Xms512m -Xmx2048m -Dorg.diylc.scriptRun=true</string>
      <key>WorkingDirectory</key>
      <string>$APP_PACKAGE/Contents/Resources</string>
      <key>SplashFile</key>
      <string>$APP_PACKAGE/Contents/Resources/splash.png</string>
      <key>Properties</key>
      <dict>
        <key>com.apple.mrj.application.apple.menu.about.name</key>
        <string>DIYLC</string>
        <key>apple.laf.useScreenMenuBar</key>
        <string>true</string>
      </dict>
    </dict>
  </dict>
</plist>

С точки зрения структуры файлов, каталог Java в старом DIYL C .app создается с Jar-файлами, расположенными в нескольких подкаталогах, но в новом DIYL C. приложение они все там без подкаталогов.

Любая информация будет высоко ценится.

Cheers

Обновление: я нашел машину с Mojave OSX и там она работает хорошо иногда, а иногда это та же проблема, что и на Сьерра. На Мохаве, когда он не работает нормально, я обнаружил, что окно выглядит свернутым в левом нижнем углу окна. Я могу вручную изменить его размер, и тогда все в порядке. На Сьерре нигде не могу его найти.

Here's where the main window goes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...