На запуск нестатического метода (JFrame,int,int) нельзя ссылаться из статического контекста
Я написал этот код, он позволяет выбрать файл и получить имя файла и его каталог:
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);
Эта ошибка часто появляется, когда я компилирую и другие программы, не могли бы вы объяснить, почему это происходит и как ее устранить?
1 ответ
FileChooserTest
это имя класса. Вам нужен экземпляр класса, чтобы использовать его run
метод.
К счастью, у вас уже есть один. Вы создали переменную open
этого типа. Так что вы можете просто использовать open.run()
и все должно быть в порядке.