2013-03-08 4 views
1

내 사용자가 주 응용 프로그램 작업 영역에서 데이터를 선택합니다. 데이터는 쓰기 가능 목록에 저장됩니다. 그런 다음 사용자는 대화 상자를 열어 선택한 데이터를 테이블에 표시합니다. 내 사용자가 처음으로 대화 상자를 열 때. 모든 것이 잘되고 일들이 계획대로 작동합니다. 그러나 대화 상자를 닫은 다음 다시 열 때. 다음과 같은 오류가 발생합니다.org.eclipse.swt.SWTExecption : 위젯이 삭제되었습니다.

enter image description here

그들은 대화 상자를 닫고 더 많은 데이터를 선택 사용할 수 있습니다. 대화 상자를 다시 열면 이전 데이터와 새 데이터를 볼 수 있습니다.

코드가 오류까지 사용하고있는 순서입니다.

오류에
protected Control createDialogArea(Composite parent) { 
    Composite composite = (Composite) super.createDialogArea(parent); 
    Label line = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL); 
    line.setLayoutData(new GridData(SWT.FILL, SWT.END, true, true)); 
    final GridLayout gridLayout = new GridLayout(); 

    gridLayout.marginWidth = 15; 
    gridLayout.marginHeight = 10; 
    composite.setLayout(gridLayout); 

    GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); 
    composite.setLayoutData(gridData); 
    createTopButtons(composite); 
    createTableViewer(composite); 
    createRemoveButtons(composite); 
    updateTableViewer(); 
    return composite; 
} 

, 우리가 오류에서 updateTableViewer

public void updateTableViewer() { 
    setRemoveButtonVisibility(); 
    setRemoveAllButtonVisibility(); 
    setPlotButtonVisibility(); 
    setPDFButtonVisibility(); 
} 

에서 오는 볼 수 있습니다, 우리는()는 setRemoveButtonVisibility에서 오는 것을 볼; 조건은 사용자가 선택한 데이터를 저장하는 기록 가능한 목록을 검사하는 경우

removeButton.setVisible(true); 

:

public void setRemoveButtonVisibility() { 
    if (AplotDataModel.getInstance().getSize() > 0) { 
    removeButton.setVisible(true); 
    } 
    else { 
    removeButton.setVisible(false); 
    } 
} 

그것이 가리키는 라인이다. 목록이 비어있는 경우 버튼이 표시되지 않으며 데이터가있는 경우 버튼이 표시됩니다.

protected void createButtonsForButtonBar(Composite parent) { 
    Button okButton = createButton(parent, OK, "Close Aplot", true); 
    okButton.addSelectionListener(new SelectionAdapter() { 
    public void widgetSelected(SelectionEvent e) { 
     viewer = null; 
     close(); 
    } 
    }); 
} 

어떤 생각 : 여기

대화 버튼의 폐쇄에 대한 코드?

답변

5

close() 대신에 getShell().setVisible(false)을 사용하여 대화 상자를 숨 깁니다. 같은 대화 상자를 다시 사용하기 때문에 닫지 않아야합니다. 그리고 대화 상자를 닫고 대화 상자를 닫으면 대화 상자를 열어야 할 때마다 새 대화 상자를 만들어야합니다.

0

셸을 닫은 후에 정보를 읽지 않으려면 확인하십시오. 예 : shlUpload가 더 이상 객체 "콤보"를보고 닫으 일단

System.out.println(combo.getText()) 
shlUpload.close(); 
ImportGroup window = new ImportGroup(); 
window.open(combo.getText()); 

이 작동하지 않습니다. 오스틴

관련 문제