私はスイングが初めてだと言って始めたいと思います。JFileChooserを使用してディレクトリを選択する場合、私がやろうとしていることはすべてです。ディレクトリを開いてナビゲートし、選択できます。ダイアログを閉じるボタンを押すと問題が発生します。それを行うと、アプリケーションがフリーズします。ダイアログボックスが戻ってくるパネルだけがフリーズすると、白くなります。デバッガーをステップ実行すると、ダイアログが閉じた直後にハングが発生し、if ステートメントに到達しません。また、それが異なる場合は、Eclipseプラグイン内でこれを行っています。特に、ビュー内でホストされます。以下のコード:
public class TexturePacker extends ViewPart {
public void createPartControl(Composite parent) {
Composite composite = new Composite(parent, SWT.EMBEDDED | SWT.NO_BACKGROUND);
frame = SWT_AWT.new_Frame(composite);
frame.add(new TexturePackerPanel(frame));
}
}
public class TexturePackerPanel extends JPanel {
//This is called from initialize(), which is called in the constructor
private void initializeConfigPanel() {
JPanel configPanel = new JPanel();
JTextBoxk outputDirectory = new JTextField();
configPanel.add(inputDirectory);
JButton fileButton = new JButton("Folder");
fileButton.addMouseListener(new MouseListener(){
@Override
public void mouseClicked(MouseEvent arg0) {
JFileChooser file = new JFileChooser(outputDirectory.getText());
file.setDialogTitle("Select Output Directory");
file.setDialogType(JFileChooser.OPEN_DIALOG);
file.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int returnVal = file.showDialog(frame, "Choose");
if(returnVal == JFileChooser.APPROVE_OPTION) {
outputDirectory.setText(file.getSelectedFile().getAbsolutePath());
}
}
//Other blank MouseListener methods//
});
configPanel.add(fileButton);
}
}
システム情報:
Windows 8 64 ビット
Java 7
Eclipse 4.2 SR1 EE Edition
この問題は、Swing が Eclipse 内で正常に動作しないことが原因であると確信しています。SWT Directory Dialog を使用して正常に動作するようになりました。そこで、JPanel 全体を SWT に変換します。みんなの助けに感謝します。Swing がどのように機能するかについて、より多くのことを知ることができました。