Tôi có luồng dữ liệu này, khoảng:Java + Swing: viết code lại với nhau các sự kiện thay đổi
DataGenerator -> DataFormatter -> UI
DataGenerator là một cái gì đó mà tạo ra dữ liệu nhanh chóng; DataFormatter là một cái gì đó định dạng nó cho mục đích hiển thị; và giao diện người dùng chỉ là một loạt các yếu tố Swing.
Tôi muốn làm một cái gì đó DataGenerator của tôi như thế này:
class DataGenerator
{
final private PropertyChangeSupport pcs;
...
public void addPropertyChangeListener(PropertyChangeListener pcl) {
this.pcs.addPropertyChangeListener(pcl);
}
public void removePropertyChangeListener(PropertyChangeListener pcl) {
this.pcs.removePropertyChangeListener(pcl);
}
}
và chỉ cần gọi this.pcs.firePropertyChange(...)
bất cứ khi nào phát dữ liệu của tôi có dữ liệu mới; sau đó tôi chỉ có thể làm dataGenerator.addPropertyListener(listener)
trong đó listener
chịu trách nhiệm đẩy thay đổi chuyển tiếp đến DataFormatter và sau đó đến giao diện người dùng.
Vấn đề với cách tiếp cận này là có hàng nghìn thay đổi DataGenerator mỗi giây (từ 10.000 đến 60.000 mỗi giây tùy thuộc vào tình huống của tôi) và chi phí tính toán định dạng cho giao diện người dùng đủ cao tải không cần thiết trên CPU của tôi; thực sự tất cả tôi quan tâm về trực quan là nhiều nhất 10-20 thay đổi mỗi giây.
Có cách nào để sử dụng cách tiếp cận tương tự, nhưng kết hợp các sự kiện thay đổi trước khi chúng đến DataFormatter không? Nếu tôi nhận được nhiều sự kiện cập nhật trên một chủ đề, tôi chỉ quan tâm đến việc hiển thị sự kiện mới nhất và có thể bỏ qua tất cả các chủ đề trước đó.
Cách duy trì giá trị dài với System.nanoTime của giao diện người dùng cuối cùng- cập nhật và bỏ qua các sự kiện thay đổi thuộc tính nếu chúng xảy ra N ns sau khi cập nhật? – aioobe
Tôi nghĩ rằng (heck, 'System.currentTimeMillis()' sẽ làm việc - Tôi chỉ quan tâm nếu mọi thứ nhanh chóng liên quan đến nhận thức của con người), nhưng có một vấn đề. Giả sử bạn có sự kiện thay đổi 100 micro giây sau khi cập nhật trực quan, vì vậy DataFormatter/UI bỏ qua thay đổi. Bây giờ vì lý do nào đó DataGenerator ngừng sản xuất các bản cập nhật (nó không nhất thiết phải liên tục 10-60K sự kiện mỗi giây). Rất tiếc, bạn đã bỏ lỡ thay đổi gần đây nhất. Thật tồi tệ. –