2012-01-16 9 views
6

Tôi có một ứng dụng có JFrame chính chứa mô hình danh sách mặc định. Tôi muốn rằng nếu tôi sửa đổi một cái gì đó trên các hồ sơ này, các ứng dụng đang chạy thứ hai được tự động cập nhật.Máy quan sát và Quan sát Java không hoạt động đúng cách giữa các ứng dụng

Cho đến nay tôi có một lớp MainController mà thực hiện người nghe và ghi đè phương pháp cập nhật:

public class MainController implements ActionListener, Observer { 
    public void update(Observable o, Object o1) {} 
} 

và một lớp đơn giản mà kéo dài Quan sát

public class Comanda extends Observable{} 

Vấn đề của tôi là nếu tôi xóa một bản ghi từ ứng dụng đầu tiên, danh sách thứ hai không cập nhật. Chương trình đang xóa bản ghi từ tệp văn bản nhưng không cập nhật mô hình danh sách mặc định. Cùng một vấn đề với chỉnh sửa hoặc thêm.

Tôi đã thử thêm "reloadList()" vào phương thức cập nhật, nhưng cách này không hoạt động. Ý tưởng?

+0

Sẽ hữu ích nếu bạn hiển thị mã để bắt đầu thông báo của người quan sát. ('Observer' /' Observable' thực sự đáng lẽ không được dùng trong phiên bản 1.1. Tôi cũng sẽ sử dụng các lớp bên trong vô danh hơn là có một lớp đơn lẻ làm nhiều nhiệm vụ.) –

+0

@ rhose87: * "... để cập nhật ứng dụng đang chạy thứ hai" * [sic] ... Bạn đang chạy ** hai ứng dụng Java khác nhau ** và mong đợi hành động đang diễn ra trong một ứng dụng sẽ được thông báo trong ứng dụng khác !? – TacticalCoder

+0

Ứng dụng đang chạy thứ hai? –

Trả lời

23

Bạn đã gọi addObserver trên Comanda và thêm MainController làm Observer? Ngoài ra, khi thay đổi xảy ra, bạn gọi số setChangednotifyObservers?

Nhìn vào mã bạn đã đăng, tôi có thể thấy rằng bạn chưa kết nối các đối tượng ObserverObservable với nhau. Như tôi đã nói, bạn phải gọi addObserver trên đối tượng Observable của mình, sau đó trong đối tượng Observable, bất cứ khi nào có thay đổi, bạn cần gọi setChanged rồi notifyObservers. Chỉ khi notifyObservers được gọi là phương pháp update của bất kỳ Observer s nào đã được thêm vào được gọi.

Bạn đã nói trong câu hỏi rằng khi bạn xóa một bản ghi mà danh sách không cập nhật, điều này khiến tôi nghĩ rằng Comanda có thể không phải là Object mà bạn muốn Observe. Bất kể đối tượng nào giữ được số List của bản ghi là đối tượng phải là Observable.

Hãy xem this để biết thêm thông tin về mẫu Observer/Observable.

+0

Tôi đã đăng tất cả mã của mình trực tuyến. Vui lòng kiểm tra từ [HERE] (http://www.sendspace.com/file/uzeodq) –

2

Điều bạn đang cố gắng gọi là "truyền thông liên tiến trình" - gửi dữ liệu từ ứng dụng này sang ứng dụng khác. Có nhiều cách khác nhau để làm điều đó; tìm kiếm của Google sẽ cung cấp cho bạn thêm thông tin. Observable chỉ hoạt động trong một ứng dụng duy nhất.