2015-10-20 1 views
2

У меня есть консольное приложение Java, которое открывает панель меню системы на Mac (меню в верхней части экрана), когда я запускаю java -jar jarfile.jar <args>. Я не использую Swing, и у меня нет графического интерфейса. Имя приложения в строке меню - только <package>.<mainClass>, меню просто содержит, например. О, Брось.Приложение Java Jar Console открывает панель меню системы Mac

Поскольку я вызываю это несколько раз при запуске скрипта, это немного беспокоит меня, и я хочу его отключить.

Я использую Gradle для строительства и я построю банку так:

jar { 
    baseName = 'appname' 
    from(configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }) { 
    exclude "META-INF/*.SF" 
    exclude "META-INF/*.DSA" 
    exclude "META-INF/*.RSA" 
    } 

    def commit = "git rev-parse --short HEAD".execute().text.trim() 

    manifest { 
    attributes(
     'Implementation-Title': 'appname', 
     'Implementation-Version': '1.0', 
     'Commit-Id': commit, 
     'Built-By': System.getProperty('user.name'), 
     'Built-Date': new Date(), 
     'Built-JDK': System.getProperty('java.version'), 
     'Main-Class': mainClassName 
    ) 
    } 
} 

dependencies { 
    compile 'com.lowagie:itext:2.1.3' 
    compile 'com.itextpdf:itext-hyph-xml:5.1.0' 
} 

Возможно ли это? Вам нужна какая-либо другая информация? К сожалению, я не знаю, что вызывает появление строки меню, поэтому я не знаю, что еще я должен предоставить.

Я создал образец градиента-проекта: нет строки меню, даже если я добавил свои зависимости. Я также попытался установить свойство apple.laf.useScreenMenuBar, но это также не имело для меня никакого значения.

ответ

3

Если добавить следующий параметр командной строки:

-Djava.awt.headless=true 

к java командной строки в вашем скрипте, то AWT не будет пытаться инициализировать себя и элементы графического интерфейса пользователя, такие как строка меню не будет представлено.

+0

спасибо! это сработало. – dinfuehr

2

Возможно ли это?

Как указано в Using Headless Mode in the Java SE Platform, некоторые «тяжеловесные компоненты требуют равного доступа на уровне операционной системы». Mac OS X интегрирует приложение, содержащее такие компоненты, в среду рабочего стола, добавляя минимальную запись application menu, которая может быть изменена, как предложено here и here. Поведение запускается, когда такой тяжеловесный компонент создается, даже лениво. Использование -verbose может помочь идентифицировать повреждающий контейнер. Отчет об ошибке STS-3692 предполагает, что проблему трудно решить с любой общностью.

Обращение, ImageJ похожее возникновение проблемы, которая требует использования специального headless.jar, который работает в headless mode; возможен аналогичный подход для градации, для example, но я не пробовал.

+1

Спасибо за ваш ответ! – dinfuehr

Смежные вопросы