크로스 스 레 드 조작 UI
자바 에 서 는 관찰자 패턴 이 흔 하 다.크로스 스 레 드 조작 UI 도 관찰자 모드 로 구현 할 수 있다.UI 스 레 드 는 관찰자 로 서 작업 스 레 드 에'움직임'이 있 을 때 UI 스 레 드 를 주동 적 으로 알려 줍 니 다.
- import java.util.Observable;
- import java.util.Observer;
-
- public class MyAction extends Observable{
-
- public void test(){
- this.setChanged();
- this.notifyObservers();
-
- }
-
- }
관찰 대상'마 이 액 션'은 테스트 방법 을 통 해 관찰자 에 게 알 린 다.MyAction 은 작업 스 레 드 에 있 을 겁 니 다.
- public class MainFrame extends JFrame implements Observer {
-
- @Override
- protected void frameInit() {
- // TODO Auto-generated method stub
- super.frameInit();
- this.setLayout(null);
- JButton jb = new JButton("test");
- jb.setSize(100, 100);
- jb.addActionListener(new ActionListener() {
-
- @Override
- public void actionPerformed(ActionEvent e) {
- // TODO Auto-generated method stub
- Thread t = new Thread(){
-
- @Override
- public void run() {
- // TODO Auto-generated method stub
- MyAction action = new MyAction();
- //
- action.addObserver(MainFrame.this);
- try {
- this.sleep(5000);
- } catch (InterruptedException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- action.test();
- }
-
- };
- t.start();
- }
- });
- this.add(jb);
- }
-
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- MainFrame f = new MainFrame();
- f.setVisible(true);
- f.setDefaultCloseOperation(EXIT_ON_CLOSE);
- f.setSize(200, 200);
-
- }
-
- @Override
- public void update(Observable o, Object arg) {
- // TODO Auto-generated method stub
- JOptionPane.showMessageDialog(null, "message");
-
- }
-
- }
관찰자 가 알림 을 받 으 면 update 방법 이 호출 되 며,이 방법 에서 UI 를 업데이트 하면 됩 니 다.
오류 정정: 이런 방법 은 크로스 라인 조작 UI 를 실현 할 수 없다.테스트 방법,update 방법 에서 Thread.currentThread().getId()를 가 져 와 UI 스 레 드 가 아 닌 ID 를 발견 합 니 다.Observable 코드 를 보 았 는데 스 레 드 를 뛰 어 넘 는 내용 이 없 었 습 니 다. 그러나 다음 JComponent 방법 은 안전 합 니 다.모든 스 레 드 에서 repaint(),revaidate(),invalidate()를 호출 할 수 있 습 니 다.(repaint()와 revaidate()방법 은 이벤트 배포 스 레 드 를 위해 대기 열 을 요청 하고 각각 paint()와 vaidate()방법 을 호출 합 니 다.invalidate()방법 은 확인 이 필요 할 때 하나의 구성 요소 와 모든 직접 조상 을 표시 합 니 다.)그래서 이 방법 들 을 다시 써 서 UI 를 업데이트 할 수 있 습 니 다. 또한 타이머 로 작업 스 레 드 의 데 이 터 를 주동 적 으로 가 져 올 수 없습니다.타이머 가 다른 스 레 드 에서 실행 되 기 때문에 참고 할 수 있 습 니 다.http://jianshusoft.blog.51cto.com/2380869/764382。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
양식 제출 후 제출 버튼 비활성화텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.