【Java】Java で Windows の メッセージ通知を行うには...

■ サンプル

 * 画像「icon.png」は resources内に配置しておく

Main.java

import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.TrayIcon.MessageType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

public class Main {

  public static void main(String[] args) {
    System.out.println("Enter");

    SystemTray systemTray = SystemTray.getSystemTray();

    URL url = ClassLoader.getSystemResource("icon.png");
    Image image = Toolkit.getDefaultToolkit().createImage(url);

    PopupMenu popup = new PopupMenu();
    TrayIcon trayIcon = new TrayIcon(image, "Hello World", popup);
    trayIcon.setImageAutoSize(true);
    trayIcon.setToolTip("System tray icon tooltip");

    MenuItem exitMenuItem = new MenuItem("Exit");
    exitMenuItem.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent event) {
        // メニューが選択された
        System.out.println("Clicked!");
        systemTray.remove(trayIcon);
        System.exit(0);
      }
    });
    popup.add(exitMenuItem);

    try {
      systemTray.add(trayIcon);
    } catch (AWTException ex) {
      ex.printStackTrace();
    }
    
    trayIcon.displayMessage("Hello, World", "notification demo", MessageType.INFO);
    trayIcon.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent event) {
        // アイコンがダブルクリックされる
        System.out.println("Clicked!!");
        systemTray.remove(trayIcon);
        System.exit(0);
      }
    });
    
    System.out.println("Exit");
  }
}

個人的な感想

 * WindowsならJavaより.NET系で実装した方がいいかも
  => 以下の関連記事で実装してみた(2018/12/03追記)
NotifyIcon ~ ポップアップ通知を行うには... ~
https://blogs.yahoo.co.jp/dk521123/37855712.html


関連記事

NotifyIcon ~ ポップアップ通知を行うには... ~

https://blogs.yahoo.co.jp/dk521123/37855712.html