rho*_*ron 11 java macos swing imageicon
我正在尝试为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)
Kei*_*all 28
setIconImage没有设置jar图标.它将设置最小化窗口的图标JFrame.jar图标(控制finder图标和dock应用程序图标)无法在jar文件中设置.您只需获得操作系统提供的默认图标.您需要使用JarBundler for OS X或Launch4J for Windows 等包装它.
您可以在应用程序运行时设置应用程序停靠栏图标,请参阅com.apple.eawt.Application.setDockIconImage.它不是完美的,但因为当你对你的罐子双击,它使用通用的Java图标在码头启动,只有一个或java代码开始运行,当两个反弹后,切换到您的自定义图标.此外,我认为它不会为未运行的jar设置停靠图标(不是说你可以将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);
}
}
Run Code Online (Sandbox Code Playgroud)
只是添加我在纯Java应用程序中添加MacOSX Dock图标的最终解决方案:
public boolean exists(String className)
{
try {
Class.forName( className, false, null );
return true;
}
catch (ClassNotFoundException exception) {
return false;
}
}
public void setIcon( BufferedImage icn )
{
if ( exists( "com.apple.eawt.Application" ) )
{
com.apple.eawt.Application.getApplication().setDockIconImage( icn );
}
}
Run Code Online (Sandbox Code Playgroud)
这样可以无声地确保类可用并执行该setDockIconImage()方法.对我来说效果很好,它不会干扰其他平台.
您可以将.icns文件放在应用程序包的Contents/Resources目录中,并在Info.plist文件中引用它.例如,一个名为的文件ApplicationName.icns将被<dict>此表单的条目引用:
<key>CFBundleIconFile</key>
<string>ApplicationName.icns</string>
Run Code Online (Sandbox Code Playgroud)