我正在设置一个Jar文件的图标图像:
setIconImage(new ImageIcon(getClass().getResource("logo.png")).getImage());
当在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
解决方法
setIconImage
没有设置jar图标.它将设置该JFrame的最小化窗口的图标. jar文件本身不能设置jar图标(它控制finder图标和Dock应用程序图标).您只需获取操作系统提供的默认图标.您将需要使用诸如用于OS X的
JarBundler或Windows的Launch4J.
您可以在应用程序运行时设置应用程序停靠图标,请参阅com.apple.eawt.Application.setDockIconImage
.但是,它并不完美,因为当您双击您的jar时,它将使用通用的java图标在dock中启动,并且只切换到您的自定义反弹后的图标或两个java代码开始运行时.另外,我不认为它会设置一个没有运行的jar的dock图标(不是你可以拖动一个jar文件到码头 – 似乎不适用于我).
以下是一些可以设置不同图像的代码:
import com.apple.eawt.Application; import javax.swing.*; class SetIcon extends JFrame { SetIcon() { setIconImage(new ImageIcon("doc.png").getImage()); Application.getApplication().setDockIconImage( new ImageIcon("app.png").getImage()); } public static void main(String args[]) { SetIcon s = new SetIcon(); s.setVisible(true); } }