Всем привет. Разрабатываю проект в Eclipse на языке программирование Java. Проблема заключается в следующим: Создал класс FileChooser.java и основной класс Main.java. Написал код для FileChooser.java вот так:
public class FileChooser extends JPanel{
private FileChooser(){
final JFileChooser fileChooser = new JFileChooser();
final JButton open = new JButton("Open");
fileChooser.setCurrentDirectory(new File("C:/Users/Elmar/Desktop"));
fileChooser.setDialogTitle("Choose Your Project");
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if(fileChooser.showOpenDialog(open) == JFileChooser.APPROVE_OPTION){
}
}
public static void main(String[] args){
final FileChooser fileChooser = new FileChooser();
}
}
При всем этом я вызываю метод main в классе Main.java таким образом
openProject.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FileChooser.main(args);
}
});`
И когда все готово я запускаю программу и при нажатие на кнопку Open программа зависает и перестает работать. Мне JFileChooser нужен в отдельном классе из-за этого я так написал код. Буду благодарен за помощь
Метод public static void main(String[] args){} - не совсем обычный метод. это, если можно так выразиться, точка входа в приложение, поэтому, пока не придет понимание происходящего, для простоты действуйте по правилу: "одно приложение один метод main". Посему попробуйте написать класс FileChooser без него:
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
public class FileChooser extends JFileChooser{
private static final long serialVersionUID = -2339847367533082834L;
private final JButton openButton;
public FileChooser(){
openButton = new JButton("Open");
}
public void startFileChooser(){
setCurrentDirectory(new File("C:/Users/Elmar/Desktop"));
setDialogTitle("Choose Your Project");
setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
if(showOpenDialog(openButton) == JFileChooser.APPROVE_OPTION){
//после нажатия на кнопку выводит путь к выбранной директории
System.out.println(getSelectedFile());
}
}
}
Разумеется, вместо FileChooser.main(args) следует сделать так: new FileChooser().startFileChooser().
Обратите также внимание на использование конструктора. Вы его используете, чтобы запустить логику. Так делать не стоит по многим причинам. Для этого существуют обычные методы. А конструктор по сути своей призван делать две вещи: создавать экземпляр класса и инициализировать поля.
Переименуй main во что то другое А ещё `
if(fileChooser.showOpenDialog(open) == JFileChooser.APPROVE_OPTION){
}
ничего не делает.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости