Не можете использовать новый экземпляр с пользовательским JFileChooser: без конструктора? - PullRequest
0 голосов
/ 21 июня 2019

Это не моя программа, но никто еще не сталкивался с этой проблемой, я первый, поэтому оригинальный разработчик уже пытался мне помочь, но не смог помочь, так как программа отлично работает для всех остальных.

Мне нужно нажать на кнопку, и на этой кнопке должно было отображаться всплывающее окно для выбора файла (JFileChooser), но на каждом компьютере он отлично работает, а на моем - нет,не происходит всплывающее окно, только ошибка на отладчике.

программа имеет отладчик, то есть код, который создает журнал ошибок:

      return (T)clazz.getConstructor(new Class[0]).newInstance(new Object[0]);
    } catch (ReflectiveOperationException e) {
      e.printStackTrace();
      throw new RuntimeException("No default constructor found for " + clazz.getName());
    } 
  }

/ \ это то, что создаетжурнал.


это проблема, описанная в журнале отладки: /

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: `
No default constructor found for com.github.manolo8.darkbot.gui.tree.components.JFileOpener

Я уже установил правильный SDK и время выполнения, тот, который каждыйиспользует, и у них не было проблем.

это код внутри файла: "JFileOpener"

import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JFileChooser;

public class JFileOpener extends JLabel implements OptionEditor {
  private final JFileChooser fc = new JFileChooser(new File("."))
    {
      protected JDialog createDialog(Component parent) throws HeadlessException {
        JDialog dialog = super.createDialog(parent);
        dialog.setAlwaysOnTop(true);
        return dialog;
      }
    };

  public JComponent getComponent() { return this; }

  public void edit(ConfigField field) {
    setText(Strings.fileName((String)field.get()));
    SwingUtilities.invokeLater(() -> {
          if (this.fc.showOpenDialog(null) != 0)
            return;  field.set(this.fc.getSelectedFile().getAbsolutePath());
          setText(Strings.fileName((String)field.get()));
        });
  }
}

1 Ответ

0 голосов
/ 21 июня 2019

Вы пытались добавить конструктор по умолчанию для вашего JFileOpener класса? Просто чтобы посмотреть, что происходит?

public class JFileOpener extends JLabel implements OptionEditor {

    public JFileOpener() { //Here
        super();
    }

    private final JFileChooser fc = new JFileChooser(new File(".")) {
        @Override
        protected JDialog createDialog(Component parent) throws HeadlessException {
            JDialog dialog = super.createDialog(parent);
            dialog.setAlwaysOnTop(true);
            return dialog;
        }
    };

    public JComponent getComponent() {
        return this;
    }

    public void edit(ConfigField field) {
        setText(Strings.fileName((String) field.get()));
        SwingUtilities.invokeLater(() -> {
            if (this.fc.showOpenDialog(null) != 0)
                return;
            field.set(this.fc.getSelectedFile().getAbsolutePath());
            setText(Strings.fileName((String) field.get()));
        });
    }
}
...