2010-02-18 81 views
1

我需要設計一個Swing應用程序,它需要根據客戶請求發送多個作業。每個作業都運行相同的shell腳本,需要10-30分鐘才能返回一個值。 (作業不在應用程序服務器上運行或作爲Web服務運行),那麼Swing應用程序需要根據返回值決定下一步該做什麼。 我的問題是如果我可以使用JMS發送作業。如果不是,你建議我看看什麼?多線程 ....JMS可以在Java Swing App中使用

回答

4

多線程是這裏明顯的第一個近似值。看看SwingWorker,在後臺線程中啓動進程,監視進度(如顯示用戶是否仍在運行,甚至可以查看正在發送到控制檯的內容)等等。這些是顯而易見的選擇。

JMS會爲您解決哪些問題(並且您必須找到可在桌面上運行的輕量級JMS實現),以允許重試並確保該過程運行完成。某些需要20分鐘才能在shell腳本中運行的東西聽起來並不像它是重試的候選者,但是如果是這樣,並且重要的是消息真的能夠通過而不是讓線程死掉並且忘記進程如果用戶關閉了Java應用程序,那麼JMS是需要查看的類型。

+0

感謝您的建議!我會看看SwingWorker。 – mengmenger 2010-02-18 05:00:03

2

JMS肯定可以用在基於Swing的應用程序中。如果shell腳本將由正在偵聽JMS隊列並在另一個隊列或主題上響應的服務在服務器上執行。

沒有什麼限制您在桌面應用程序中使用JMS隊列或主題。

+0

我得到了你說的。 shell腳本不會在服務器上由服務執行。這是純粹的swing應用程序。我想我會研究多線程。謝謝! – mengmenger 2010-02-18 05:01:00

+0

如果您想在本地系統上運行較長的任務,那麼您確實需要在Swing應用程序中使用多線程。 – orj 2010-02-19 00:41:53

2

JMS通常用於在進程之間和客戶端/服務器之間進行通信,而不是真的在這裏尋找什麼,除非您將它們發送到服務器進行處理,但聽起來不像那樣這裏。這聽起來像是你正在尋找一個工作隊列,例如一個swing應用程序有一個按鈕,它將一個新任務添加到隊列中(任務運行shell腳本的地方)。然後您可以擁有多個線程來執行隊列任務並運行腳本。

+0

謝謝!我將使用多線程。 – mengmenger 2010-02-18 05:02:11

1

您可能 - 也可能不 - 從使用工作計劃程序(如Quartz)中獲利。也許它是過度殺傷,也許這正是你需要的。

相關問題