Почему не получается запустить directoryChooser из JButton

254
01 августа 2017, 15:53

Использую Window Builder в Eclipse. При выполнении следующего кода получаю ошибку.

package jXMLparser;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.io.File;
import java.awt.event.ActionEvent;
import javax.swing.JList;
import javafx.scene.control.ListView;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.stage.Window;
public class Interface {
    private JFrame frame;
    private ListView listview;
    public static Window stage;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Interface window = new Interface();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    /**
     * Create the application.
     */
    public Interface() {
        initialize();

    }
    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 450, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        JButton btnOpenFolder = new JButton("Open folder");
        btnOpenFolder.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                DirectoryChooser directoryChooser = new DirectoryChooser();
                directoryChooser.setInitialDirectory(new File("C:\\Users\\IXJ5JC\\Desktop"));
                File selectedDirectory = directoryChooser.showDialog(stage);
                System.out.println("--- Selected Directory is: " + selectedDirectory);   
            }
        });
        btnOpenFolder.setBounds(12, 217, 175, 25);
        frame.getContentPane().add(btnOpenFolder);
        JList listView = new JList();
        listView.setBounds(34, 13, 361, 47);
        frame.getContentPane().add(listView);
    }
}

Текст ошибки:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: This operation is permitted on the event thread only; currentThread = AWT-EventQueue-0
    at com.sun.glass.ui.Application.checkEventThread(Application.java:443)
    at com.sun.glass.ui.CommonDialogs.showFolderChooser(CommonDialogs.java:225)
    at com.sun.javafx.tk.quantum.QuantumToolkit.showDirectoryChooser(QuantumToolkit.java:1527)
    at javafx.stage.DirectoryChooser.showDialog(DirectoryChooser.java:103)
    at jXMLparser.Interface$2.actionPerformed(Interface.java:64)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
Answer 1

Используйте JFileChooser и все будет работать

btnOpenFolder.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        JFileChooser directoryChooser = new JFileChooser(new File("C:\\Users\\IXJ5JC\\Desktop"));
        directoryChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        directoryChooser.showDialog(null, "Ok");
        File selectedDirectory = directoryChooser.getSelectedFile();
        System.out.println("--- Selected Directory is: " + selectedDirectory);
    }
});
READ ALSO
Как добавить \ в строку в Java

Как добавить \ в строку в Java

Пишу программу которая бы создавала bat-ник для копирования файлов с одной папки в другуюИ, увы, столкнулся с проблемой когда надо вставить...

253
Объект в ArraysList

Объект в ArraysList

Добавляю в массива объектыно после передачи массива через callback, вызов функций типа getTitle() getDescription() не работают

331
Вывод даных из MySql есть нюанс [дубликат]

Вывод даных из MySql есть нюанс [дубликат]

На данный вопрос уже ответили:

347
Типы ссылок, полный и не полный адрес

Типы ссылок, полный и не полный адрес

Есть ли различия между ссылками

214