我所要做的就是将一个简单的java程序转换为macOSX .app文件,这样我就可以将它作为一个简单的可执行文件分发.
我到处都读过,每个人都说同样的话:
使用Jar Bundler - 所有教程似乎都已过时,但它不起作用.当我运行:java -jar jarbundler-2.0.0.jar
控制台返回"jarbundler-2.0.0.jar中没有主要清单属性"
如果我是对的,那么打包jar文件的人会失败吗?但我试过从其他网站和其他版本下载它,但我得到了相同的东西.
他们说你可以自己创建目录和文件,然后将你的文件夹重命名为.app,然后对它运行一个命令,但这很复杂,因为我不确切知道如何创建一个info.plist文件......如果你想这样做,我到目前为止找到的最好的网站就是这个:OSX的Java部署选项
我已将我的代码编译成.jar文件,我有一个图标和所有内容,我需要做的就是以某种方式将其打包到.app文件中.
我在这里先向您的帮助表示感谢!
编辑:我明白了!经过7或8个小时的搜索和阅读后,它可以工作.因为我是新手,所以我将发布我所学到的所有东西来拯救那些经历过同样问题的人.我放弃了自己做的方法,然后回到了JarBundler.如果其他人正在读这个并且他们对ANT一无所知,那就是我所做的:下载JarBundler,我从这里得到了我的:Mac OS X JarBundler ANT任务并按照其中的说明操作.
下载时,请将jarbundler-2.2.0.jar文件放在此处:
的/ usr /共享/蚂蚁/ lib中
您可能必须运行命令来移动它,例如:
sudo mv jarbundler-2.2.0.jar~ /../../ usr/share/ant/lib/jarbundler-2.2.0.jar
就像我说的那样,我还在学习,但这对我有用.
确保您移动合适jarbundler,这是我遇到了问题,我把整个文件夹,而不是内部.jar文件,所以一定要移动拉链你下载的是这样的文件夹内的.jar,而不是整个事情,否则当你去构建它时,你会得到一个错误,如错误:taskdef class net.sourceforge.jarbundler.JarBundler找不到.
然后你需要将你的代码编译成一个.jar文件(有两种类型,一种是像.zip,另一种是可执行文件)你想要一个普通的JAR文件,不是可执行的,所以要做到这一点你首先需要编译您的代码获取.class文件,然后打开命令提示符并按照此处的说明操作:创建一个Jar文件该命令将如下所示:
jar cf myName.jar*.class
获得jar文件后,需要在同一文件夹中创建.xml文件,并且需要将其命名为build.xml.使用文本编辑器编辑它.按照上面链接中的说明创建它.它看起来像这样:
//build.xml
<project name="MyProject">
<taskdef name="jarbundler"
classname="net.sourceforge.jarbundler.JarBundler" />
<target name="bundle">
<jarbundler dir="release"
name="Apollo's Image Editor"
mainclass="ImageEditorGUI"
jar="ApolloIE.jar"
icon="Aperture.icns" />
</target>
</project>
Run Code Online (Sandbox Code Playgroud)
从那里(顺便说一下,我使用的是Macbook Pro)你所要做的就是从该文件夹运行一个命令行:
蚂蚁束
它应该在名为release的文件夹中创建一个.app文件.总结一下:你需要的只是同一个文件夹中的.jar文件和build.xml文件,然后运行命令:ant bundle(或者你在build.xml文件中命名为target的任何东西,我把它命名为bundle)
祝你好运,希望这有助于那里的任何人.
如果有人想知道,我拿了由JarBundler生成的Info.plist并将其放入我正在制作的目录中并且它有效!所以这就是问题,我只是不知道如何正确格式化......这里是:Info.plist
我正在尝试为Jar文件设置图标图像:
setIconImage(new ImageIcon(getClass().getResource("logo.png")).getImage());
Run Code Online (Sandbox Code Playgroud)
在Mac OS X 10.7.4中运行时出现以下错误:
Jun 28 15:21:40 (my dhcp) java[73383] <Error>: CGContextGetCTM: invalid context 0x0
Jun 28 15:21:40 (my dhcp) java[73383] <Error>: CGContextSetBaseCTM: invalid context 0x0
Jun 28 15:21:40 (my dhcp) java[73383] <Error>: CGContextGetCTM: invalid context 0x0
Jun 28 15:21:40 (my dhcp) java[73383] <Error>: CGContextSetBaseCTM: invalid context 0x0
Jun 28 15:21:40 (my dhcp) java[73383] <Error>: CGContextGetCTM: invalid context 0x0
Jun 28 15:21:40 (my dhcp) java[73383] <Error>: CGContextSetBaseCTM: invalid context 0x0
Run Code Online (Sandbox Code Playgroud) 我到目前为止使用以下代码在Apple MacBook上设置应用程序名称(在"系统"菜单栏的顶部).(实际上,我认为我是从stackoverflow复制的.)
基本上,有一个单独的AppLauncher类,它在为应用程序本身创建一个新的Runnable之前使用System.setProperty()来设置应用程序名称.
工作得很好.
但是,由于我下载并开始使用JDK 1.7,解决方案停止工作 - 我在菜单中获得了Class Name而不是App Name,就像我找到解决方案之前一样.我试着谷歌搜索它,但无济于事.
以下是过去在JDK 1.6下工作的失效代码,简化为相关部分:
public class AppLauncher {
public static void main(String[] args) {
System.setProperty("apple.laf.useScreenMenuBar", "true");
System.setProperty("com.apple.mrj.application.apple.menu.about.name",
"My Application");
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new MainWindow();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的建议!
ETA:使用java -Dapple.laf.useScreenMenuBar = true调用仍然有效.将属性设置为Info.plist可能会有效,但我还没有尝试过.
我必须发布带有嵌入式JRE的swing应用程序.带有application + JRE + .bat/.sh的压缩存档为Windows和Linux提供了技巧.用户下载zip,解压缩并启动应用程序.完善.
但是现在,我必须为Mac OS X提供相同的功能.我已经阅读/被告知有很多不同的事情(禁止在Mac上发布JRE,相反,Mac上总是有JRE等. ..),所以我真的很困惑我可以做什么.
有没有人做过这样的事情?你是如何解决Mac应用程序部署的?作为奖励,在Mac上分发我的应用程序的最佳格式是什么(zip?)?
好的,所以我之前已经完成了Swing应用程序,并且我知道如果你想为应用程序菜单显示一个不同的名称(通常具有"首选项"和"退出"选项的Mac上的那个),你必须使用:System.setProperty("com.apple.mrj.application.apple.menu.about.name", "App name");它必须在创建JFrame之前执行.我已经完成了这个,但它继续显示我的Main类的名称作为菜单名称,就好像我根本没有编写那行代码.我搜索了这个问题,但找不到任何有用的东西,然后我就在这里搜索,但是每个遇到类似问题的人都在运行Java 1.5,1.6或1.7.所以我想也许它与我目前的Java版本1.8有关.
这个,这个,这个没用.这个,这个和这个要么发送给我过时的信息,要么链接不再起作用了.另外,我正在运行Mac 10.8.
任何建议/答案将不胜感激.
更新:
这是我原来的代码:
package bouncing_off_axes;
/**
* This is the driver class of this program.
*
* @author Mason
*
*/
public class Main {
/**
* The driving method.
*
* @param args
*/
public static void main(String[] args) {
System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Physics Engine Practice - Bouncing Balls");
SimulationController view = new SimulationController("Test");
}
}
Run Code Online (Sandbox Code Playgroud)
以下是垃圾邮件提供给其他人的解决方案:
package bouncing_off_axes;
import java.awt.Color;
import …Run Code Online (Sandbox Code Playgroud) 在Netbeans使用的Java Desktop Application模板中,使用JMenuBar和JMenuItems创建菜单栏.
如何在顶部显示该栏,其中菜单栏显示在MacOSX中而不是在窗口中,如在Windows中?