2014-09-08 4 views
0

단추로 열리 며 사용자가 계속 이동하기 전에 닫을 수있는 매우 복잡한 JDialog 창이 있습니다. 시뮬레이션을위한 시퀀스 작성자이므로 너무 자주 열지 않아야합니다. (JDialog 윈도우 자체에는 약 15 개의 레이블, 10 개의 버튼, 10 개의 체크 박스, 몇 개의 텍스트 필드, 목록 및 테이블이 포함되어 있습니다. 800x400)Java GUI : 복잡한 팝업 창의 구성 요소가 열릴 때마다 인스턴스화합니다.

기본 패널과 그 구성 요소를 배경으로 준비하는 것이 더 나은 방법입니다 , 또는 그것을 인스턴스화하고 생성자를 통해 창을 닫을 때 파괴 될 패널을 빌드합니까?

+3

메모리를 생성하거나 유지하는 데 리소스가 많은 대화 상자처럼 보이지 않습니다. 몇 가지 * 1000 * 구성 요소에 대해 언급 한 적이 있다면 .. 이러한 유형의 대화 상자를 사용하는 첫 번째 방법은 1) 필요할 때만 동적으로 생성 한 다음 2) 나 같은 시간까지 참조를 유지하는 것입니다. 'OutOfMemoryError' (그리고 심지어 그때까지, 나는 앱의 다른 부분을 먼저 살펴볼 것입니다.) –

+3

"더 나은 실습입니다"는 주로 의견 기반이기 때문에 stackoverflow에 대한 적절한 질문이 아닙니다. 내 의견 : 인스턴스화하고 당신이 "행복하다"는지 확인하십시오. "너무 길어서"여는 것이 아니라면, 그 전에는 최적화에 대한 두뇌를 시작하십시오. – chiccodoro

+0

"정적이 아닌"스타일로 만드는 것은 상당히 큰 투쟁입니다. 따라서 나는 합리적인 금액의 리소스를 저장해야만 할 것입니다. 그것은 의견에 근거한 질문이 아닙니다. 그것은 완전히 기술적입니다. –

답변

1

Java는 다양한 항목에 대해 내부 캐싱을 가지고있는 것으로 보이며 (새 구성 요소의 생성에도 적용됩니다).

public class Test { 

     public static void main(String[] args) { 

     long l11 = System.currentTimeMillis(); 
     new JDialog(); 
     long l12 = System.currentTimeMillis(); 

     long l21 = System.currentTimeMillis(); 
     new JDialog(); 
     long l22 = System.currentTimeMillis(); 

     System.out.println("dialog 1: " + (l12 - l11) + " ms"); 
     System.out.println("dialog 2: " + (l22 - l21) + " ms"); 
     } 
    } 

출력 :

dialog 1: 54 ms 
    dialog 2: 1 ms 

당신은 다른 스윙 구성 요소 (또는 많은) 함께 만든 심지어 사용자 정의 구성 요소를 new JDialog();을 대체 할 수 있으며 비슷한 결과를해야합니다 이것 좀보세요.

패널/구성 요소를 재설정해야 새로운 (새로운) 패널부터 시작하는 것이 더 좋습니다. 이렇게하면 해당 패널을 유지 관리하는 동안 발생할 수있는 모든 오류/버그가 제거됩니다.

+0

EDT에서 대화 상자를 만들면 어떤 결과가 나옵니까? ** 나는 그것이 크게 다를 것이라고 확신합니다. –

+0

그러면 내기를 잃을 것입니다. :) 우리가 주석에 코드를 추가 할 수는 없지만 EDT에서 해당 코드를 실행하여 테스트를 수행 할 수 있습니다 (이미 do'it 방법을 알고 있다고 가정합니다. 그러나 다른 사람들을 위해이 코드를 작성합니다 : javax.swing 사용). .SwingUtilities.invokeLater 메서드). –

+0

답변을 수정하여 수정 된 코드를 표시 할 수 있습니다. 귀하의 예가 [JVM 성능] (http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136373.html)을 측정하고있을 수 있습니다. 또한 메모리 소비량을 살펴보아야합니다. – trashgod