我爲使用swing的桌面開發了一個高級java應用程序(Financial Management
),並且我有一些正在使用它的客戶端。最近我的一個客戶說,有時候應用程序會凍結,當他做了很多工作時,他不得不重新啓動它。
問題是,當我在我的機器上測試應用程序時工作正常,即使我用一些操作和數據超載它也不凍結!
任何人都可以給我一些關於什麼是可能的東西,可以使搖擺Java應用程序做這樣的事情,我怎樣才能提高我的應用程序的性能提示。改進java應用程序
2
A
回答
3
它可能有很多原因。我的第一個猜測是你的代碼中的某個地方會出現race condition。一個有趣的事實是,如果應用程序使用0%的CPU時間或100%的CPU時間,而它看起來是凍結的。 0%表示有些事情正在彼此等待(死鎖)。 100%表示無限循環。 如果您可以訪問客戶端的機器,您可以將調試器連接到凍結的應用程序,或使用jstack創建堆棧跟蹤轉儲。
foo.addActionListener((ActionEvent ae) -> {
// time consuming task
});
這將導致所有的用戶界面部分凍結,直到函數:
+0
不錯的提示謝謝你特別是「jstack」我需要這樣的東西: ) – SlimenTN
0
一種可能性執行一個ActionListener內的大型任務運行大型任務的Swing線程,而不是另一個線程內,例如回報。確保諸如此類的函數將實際工作傳遞給新線程或設置標誌以在現有線程中執行工作。
例如在Main的靜態布爾這是在主迴路檢查:
public static class Main {
public static boolean do_action;
public static void main(){
while(true) {
if(do_action) {
// do action of some kind
do_action = false;
}
// sleep or do other things
}
}
}
和動作監聽器,如下:
foo.addActionListener((ActionEvent ae) -> {
Main.do_action = true;
});
相關問題
- 1. 如何更改Java應用程序的進程名稱
- 2. Java應用程序顯示啓動應用程序的進度
- 3. Java Web應用程序:監視進度
- 4. AIX應用程序的性能改進。
- 5. 一個Java應用程序但2個進程java和javaw?
- 6. Java應用程序
- 7. 在碼頭集裝箱內改進java web應用程序部署過程
- 8. php/java通過java應用程序調用php應用程序
- 9. Java應用程序在Web應用程序上與Flash進行交互
- 10. java應用程序如何與android應用程序進行通信?
- 11. 創建一個新應用程序或改進現有的應用程序
- 12. 線程Java應用程序
- 13. 如何使用進程ID打開我的Java應用程序
- 14. 與從Java應用程序調用的Powershell進程交互
- 15. 無法使用遠程Java應用程序進行調試
- 16. 從另一個Java應用程序啓動Java應用程序
- 17. 從另一個java應用程序控制java應用程序
- 18. Java應用程序與Java小應用程序
- 19. 從java應用程序啓動java webstart應用程序
- 20. Netbeans Java應用程序 - 更改標題或應用程序的名稱
- 21. 從小應用程序內更改/添加Java小應用程序參數
- 22. 在Java SE和Java EE應用程序之間進行通信
- 23. 改進MPI程序
- 24. 使用Java應用程序
- 25. 將java applet更改爲java應用程序
- 26. 的Java:修改系統屬性的Java應用程序
- 27. 更改Java的LookAndFeel無需修改應用程序
- 28. 更改java進程描述
- 29. 在Java應用程序中查殺進程的問題
- 30. 運行Java應用程序作爲後臺進程
也許這可以幫助你:[課:併發Swing](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/) – pzaenger
謝謝我會看看它:) – SlimenTN