首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java Swing 多定時任務調度界面設計與實現

     編輯:Java 程式設計入門

項目背景

構建一個圖形化監控平台,需同時運行多個獨立的定時任務,每個任務擁有自定義週期、調用參數(如目標服務器地址),並能實時展示運行次數、日誌輸出。本文梳理基於 Swing 的多線程調度架構與界面交互設計。

核心需求拆解

  1. 任務隔離:四個任務並行互不干擾,單任務異常不影響其他。
  2. 動態配置:界面支持運行時修改週期(秒/分/時)、目標服務器 IP/端口等參數。
  3. 可視化監控:紅色數字顯示當前執行計次,日誌區域滾動輸出執行詳情。
  4. 生命週期管理:啟動/暫停/停止按鈕控制單任務或全局調度器。

架構設計

1. 任務抽象層

public abstract class ScheduledTask implements Runnable {
    protected volatile boolean running = false;
    protected long intervalMs;      // 執行間隔
    protected ServerConfig config;  // 目標服務器配置
    protected int executeCount = 0; // 執行計數
    
    public abstract void executeTask() throws Exception;
    
    @Override
    public void run() {
        while (running) {
            try { executeTask(); executeCount++; }
            catch (Exception e) { logError(e); }
            sleepInterval();
        }
    }
}

2. Swing 界面模型

  • TaskPanel:單任務視圖組件,包含配置區(JSpinner/JTextField)、控制按鈕、計數標籤(紅色字體)、日誌文本域(JTextArea + JScrollPane)。
  • MainFrame:網格佈局容納 4 個 TaskPanel,頂部工具欄提供「全局啟動/停止」、「導出日誌」等操作。
  • Model-View 分離:TaskPanel 監聽 ScheduledTask 的屬性變更事件(PropertyChangeListener)更新 UI,避免直接在執行線程操作 Swing 組件。

3. 線程安全與 EDT 協作

// 任務線程中更新計數
SwingUtilities.invokeLater(() -> countLabel.setText(String.valueOf(++executeCount)));

// 配置變更從 EDT 發布到任務線程
task.setIntervalMs(newInterval);
task.setConfig(newConfig);

關鍵實現細節

精準定時策略

採用 ScheduledExecutorService 替代 Timer,支持固定延遲(scheduleWithFixedDelay)與固定頻率(scheduleAtFixedRate)兩種模式,配合 TimeUnit 靈活換算用戶輸入的「每 30 秒」「每小時」等週期。

日誌輸出重定向

自定義 LogHandler 繼承 java.util.logging.Handler,publish() 方法中 SwingUtilities.invokeLater 追加到 JTextArea,並自動滾動到底部。設置 setLevel(Level.ALL) 捕獲所有級別日誌。

配置持久化

使用 Preferences API(java.util.prefs.Preferences)自動保存各任務的間隔、服務器地址等參數到系統註冊表/Linux 隱藏文件,下次啟動自動恢復。

界面效果圖

Swing 多定時任務監控界面

擴展建議

  • 引入 Quartz 支持 Cron 表達式、集群調度、持久化 JobStore。
  • 增加任務依賴圖(DAG),支持「任務 B 在任務 A 成功後執行」。
  • 接入 Prometheus + Grafana 實現指標級監控(執行耗時、成功率、隊列積壓)。

總結

Swing 雖非現代 Web 技術棧,但在內網桌面運維工具、嵌入式設備管理端等場景仍具優勢。通過「任務線程隔離 + EDT 安全更新 + Preferences 持久化」三板斧,可快速構建穩定易用的多定時任務監控台。完整代碼可參考作者 CSDN 博客(s00n/jasea@sina.com)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved