无法将新实例与自定义JFileChooser结合使用:没有构造函数?

时间:2019-06-21 18:54:53

标签: java swing jfilechooser

这不是我的程序,但是没有人遇到这个问题,我是第一个,因此原始开发人员已经尝试帮助我,但是由于该程序对其他所有人都可以用而无法帮助。 / p>

我需要单击一个按钮,该按钮应该显示一个弹出窗口以选择文件(JFileChooser),但在每个pc上都可以正常运行,但是在我看来却没有,注意发生,没有弹出窗口,只有调试器上的错误。

程序有一个调试器,即创建错误日志的代码:

      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 :(得分:0)

您是否尝试为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()));
        });
    }
}