不能从静态上下文引用非静态方法运行(jframe,int,int)

whhtz7ly  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(304)

我写了这段代码,它允许选择一个文件并获取文件名及其目录:

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class NewsReader
{
    static String filename = "";
    static String directory = "";
    public static void main (String... doNotMind)
    {
        open = new FileChooserTest
        FileChooserTest.run (new FileChooserTest(), 250, 110);
    }
}

class FileChooserTest extends JFrame 
{
    private JButton open = new JButton("Open");
    public FileChooserTest() 
    {
        JPanel p = new JPanel();
        open.addActionListener(new OpenL());
        p.add(open);
        Container cp = getContentPane();
        cp.add(p, BorderLayout.SOUTH);
        p = new JPanel();
        p.setLayout(new GridLayout(2, 1));
        cp.add(p, BorderLayout.NORTH);
    }

  class OpenL implements ActionListener 
  {
      public void actionPerformed(ActionEvent e) 
      {
          JFileChooser c = new JFileChooser();
          int rVal = c.showOpenDialog(FileChooserTest.this);
          if (rVal == JFileChooser.APPROVE_OPTION) 
          {
              NewsReader.filename = c.getSelectedFile().getName();
              NewsReader.directory = c.getCurrentDirectory().toString();
          }

          if (rVal == JFileChooser.CANCEL_OPTION) 
          {
              NewsReader.filename = "";
              NewsReader.directory = "";
          }
      }
    }

  public void run(JFrame frame, int w, int h) 
  {
      Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
      setLocation(dim.width/2-getSize().width/2, dim.height/2-getSize().height/2);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(w, h);
      frame.setVisible(true);
    }
}

当我试图编译它时,我得到了这个编译错误:

NewsReader.java:12: error: non-static method run(JFrame,int,int) cannot be referenced from a static context
    FileChooserTest.run (new FileChooserTest(), 250, 110);

这个错误在我编译其他程序的时候也经常出现,你能解释一下为什么会出现这个错误以及如何解决它吗?

i7uq4tfw

i7uq4tfw1#

FileChooserTest 是类的名称。你需要一个类的示例来使用它的 run 方法。
幸运的是,你已经有了。您创建了一个变量 open 那种类型的。所以你可以用 open.run() 应该没事的。

相关问题