Javaでかんたんタスクトレイ常駐アプリ
Javaで常駐アプリ
最近ちょっとJavaで常駐アプリを作ったので
そのことについて書きます。
Java in the BoxのJava SE 6 じゃじゃ馬ならし TrayIcon
を大いに参考にさせてもらいました。
今までJavaで常駐アプリを作るのはちょっと抵抗がありました。
というのは、黒いDOS窓が残ったりしてださかったり、
Windowsサービスに登録できるようにするのがめんどくさかったりしたからです。
しかし、Java SE6からタスクトレイが使えるようになったので、
すごく敷居が下がりました。
いちばん簡単な例
これだけのコード量でタスクトレイに常駐するアプリケーションが作れます。
まあ、本当に常駐しているだけなんですが。
Sample.java
import java.awt.*; import java.awt.event.*; import javax.imageio.ImageIO; public class Sample { public static void main(String[] args) throws Exception { // アイコンイメージの読み込み Image image = ImageIO.read(Thread.currentThread() .getContextClassLoader() .getResourceAsStream("trayicon.png")); // トレイアイコン生成 TrayIcon icon = new TrayIcon(image); // イベント登録 icon.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); SystemTray.getSystemTray().add(icon); } }
ソースコード
ソースを以下に示します。
具体的な処理を書き込めるテンプレ風のサンプルです。
TaskTraySample.java
import java.awt.*; import java.awt.event.*; import java.io.IOException; import java.util.Timer; import java.util.TimerTask; import javax.imageio.ImageIO; /** * タスクトレイ常駐アプリサンプル */ public class TaskTraySample { /** コンストラクタ */ public TaskTraySample() throws IOException, AWTException { // タスクトレイアイコン Image image = ImageIO.read( getClass().getResourceAsStream("trayicon.png")); final TrayIcon icon = new TrayIcon(image); icon.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { icon.displayMessage("アイコンクリック", "アイコンがダブルクリックされました", MessageType.WARNING); } }); // ポップアップメニュー PopupMenu menu = new PopupMenu(); // メニューの例 MenuItem aItem = new MenuItem("メニューの例"); aItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { icon.displayMessage("メニューの例", "メニューが選択されました", MessageType.ERROR); } }); // 終了メニュー MenuItem exitItem = new MenuItem("終了"); exitItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); // メニューにメニューアイテムを追加 menu.add(aItem); menu.add(exitItem); icon.setPopupMenu(menu); // タスクトレイに格納 SystemTray.getSystemTray().add(icon); TimerTask task = new TimerTask() { @Override public void run() { icon.displayMessage("タイマー", "タイマータスクです。", MessageType.INFO); } }; Timer timer = new Timer(); timer.scheduleAtFixedRate(task, 0, 1 * 60 * 1000); // 1分ごと } /** メインメソッド */ public static void main(String[] args) throws Exception { new TaskTraySample(); } }