I wrote this code, it allows to select a file and get the filename and its directory:
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);
}
}
When I tried to compile it, I got this compile error:
NewsReader.java:12: error: non-static method run(JFrame,int,int) cannot be referenced from a static context
FileChooserTest.run (new FileChooserTest(), 250, 110);
This error appears often when I'm compiling other programs as well, can you please explain why it's happening and how to resolve it?
FileChooserTest
is the name of the class. You need an instance of the class to use itsrun
method.Fortunately, you already have one. You created a variable
open
of that type. So you can just useopen.run()
and it should be OK.