카테고리 없음

[자바] 자바 스윙 스레드 안전성 및 EDT

행복을전해요 2021. 2. 23. 04:00

나는 당신이하려는 일을 완전히 이해하지 못하지만 의심 할 여지없이 당신이 잘못하고 있다고 말할 수 있습니다. 귀하의 while (true)루프는 아닌 이벤트 기반 시스템에서 존재하고, 이벤트 기반 프로그래밍의 개념을 속인다는 안된다. 대신에 당신의 코드는이 끝없는 while 루프가 아니라 이벤트에 대한 반응으로 인해 상태를 변경해야합니다.

또한 코드가 작성되기 전에 시뮬레이션에서 메서드를 호출 할 위험이 있습니다. Run 메서드 (run으로 명명되어야 함)가 호출 된 곳과 다른 스레드에서 생성되며 실행 순서를 보장 할 수 없으며 실제로 Runnable 호출이 지연되기 때문에 잘못된 순서가 발생할 수 있습니다. 코드는 호출되기 전에 먼저 이벤트 스레드에 대기해야하기 때문입니다.

더 나은 도움을 받으려면 문제를 보여주는 최소한의 컴파일 가능하고 실행 가능한 프로그램만들고 게시하는 것을 고려 하십시오.


편집 1
또한 대문자로 시작하는 클래스 이름과 소문자로 시작하는 메소드 및 변수 이름을 제공하는 것을 포함하여 Java 명명 규칙을 배우고 사용하고자 할 것입니다.


편집 2 당신은 다음과 같이 진술합니다.

기본적으로이 인스턴스화가 완료되면 프로그램이 수행 할 모든 작업은 상호 작용없이 자체적으로 업데이트됩니다. 그것이 루프의 아이디어였습니다. 루프는 시뮬레이션을 업데이트하고 표시되는 내용을 차례로 업데이트합니다.

스윙 시뮬레이션을 실행하려는 경우 애니메이션 루프에 스윙 타이머사용하는 것이 어떻습니까? 귀하의 코드는 스윙 스레딩 사고를 유발할 것으로 거의 보장됩니다.


편집 3 3
번째 또는 4 번째 읽기에서 기본 응용 프로그램에서 모달 방식으로 메뉴보기를 표시하려는 것 같습니다. 즉, 메뉴가 활성화되면 기본 응용 프로그램이 상호 작용할 수 없거나 표시되지 않습니다. 그렇다면 1) 메뉴 창에 모달 JDialog를 사용하는 것을 고려하십시오. 이렇게하면 창을 시작할 수 있으며 메뉴 창이 더 이상 표시되지 않을 때까지 시작 코드가이 위치에서 중지됩니다. 그런 다음 애니메이션 창을 표시 할 수 있습니다. 또는 2) CardLayout을 사용하여 뷰를 교환합니다. 여기에는 처음에 메뉴 JPanel을 표시하는 단일 JFrame 애플리케이션이 있습니다. 그런 다음 메뉴가 처리되면 CardLayout 스왑 뷰가 있으므로 이제 애니메이션이 제자리에 표시됩니다.



출처
https://stackoverflow.com/questions/22080030