我编写了这段代码,它允许选择一个文件并获取文件名及其目录:
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);
当我编译其他程序时,经常出现此错误,您能解释一下它发生的原因以及解决方法吗?
答案 0 :(得分:0)
FileChooserTest
是该类的名称。您需要该类的实例才能使用其run
方法。
幸运的是,你已经有了一个。您创建了该类型的变量open
。所以你可以使用open.run()
,它应该没问题。