스프링 부트 애플리케이션을 설정 중이며 호스트가 일부 빈 정보에 액세스 할 수있는 시스템 트레이 아이콘에 액세스 할 수 있도록하려고합니다.스프링 부트 사용 SystemTray 아이콘
현재 @Autowired 세부 정보가있는 SystemTrayIcon 용 Bean을 만들려고합니다. 그러나 나는 다음과 같은 예외 얻을은 SystemTrayIcon 추가하려고하면하십시오 SpringBoot 응용 프로그램은 시스템 트레이 아이콘에 액세스 할 수있는 방법이
Caused by: java.awt.HeadlessException
at java.awt.TrayIcon.<init>(Unknown Source)
at java.awt.TrayIcon.<init>(Unknown Source)
at java.awt.TrayIcon.<init>(Unknown Source)
at hermes.subsrciber.systemTray.HermesTrayIcon.<init>(HermesTrayIcon.java:36)
at hermes.subscriber.boot.AppStarter.trayIcon(AppStarter.java:83)
at hermes.subscriber.boot.AppStarter$$EnhancerBySpringCGLIB$$c4f80849.CGLIB$trayIcon$3(<generated>)
at hermes.subscriber.boot.AppStarter$$EnhancerBySpringCGLIB$$c4f80849$$FastClassBySpringCGLIB$$d62ab0bd.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:312)
at hermes.subscriber.boot.AppStarter$$EnhancerBySpringCGLIB$$c4f80849.trayIcon(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:166)
... 17 more
거기를?
나는 메인 메소드 (SpringApplication.run을 따라)에서 간단하게 정의 할 수 있다고 믿지만, 내 속성을 autowire 할 수는 없다.
이 설정이 가능합니까?
public class MyTrayIcon extends TrayIcon {
private static final String IMAGE_PATH = "/path/icon_16x16.png";
private static final String TOOLTIP = "Text";
private PopupMenu popup;
private SystemTray tray;
public MyTrayIcon(){
super(createImage(IMAGE_PATH,TOOLTIP),TOOLTIP);
popup = new PopupMenu();
tray = SystemTray.getSystemTray();
}
@PostConstruct
private void setup() throws AWTException{
// popup.add(itemAbout);
// here add the items to your popup menu. These extend MenuItem
// popup.addSeparator();
setPopupMenu(popup);
tray.add(this);
}
protected static Image createImage(String path, String description){
URL imageURL = MyTrayIcon.class.getResource(path);
if(imageURL == null){
System.err.println("Failed Creating Image. Resource not found: "+path);
return null;
}else {
return new ImageIcon(imageURL,description).getImage();
}
}
}
실제로 시스템 트레이 아이콘을 추가하는 코드를 제공 할 수 있습니까? – yglodt
https://docs.oracle.com/javase/tutorial/uiswing/misc/systemtray.html 괜찮을 것입니다. – mangusbrother
실제로 정확히 시도했지만 이상하게 SystemTray.isSupported()는 false를 반환합니다. 어떤 생각? (builder.headless (false)를 설정합니다.) 중요한 경우를 위해 – yglodt