这是一个使用JFileChooser的程序:
package execute;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class FCDemo extends JFrame
{
JFileChooser fc = new JFileChooser();
private String fileName;
public FCDemo(String title)
{
super(title);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JPanel pnl = new JPanel();
pnl.setLayout(new GridLayout(2, 1));
JButton btn = new JButton("JFileChooser.showOpenDialog() Demo");
ActionListener al;
al = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent ae)
{
switch (fc.showOpenDialog(FCDemo.this))
{
case JFileChooser.APPROVE_OPTION:
fileName=fc.getSelectedFile().getName();
JOptionPane.showMessageDialog(FCDemo.this, "Selected: "+fc.getSelectedFile(),"FCDemo",JOptionPane.OK_OPTION);
break;
case JFileChooser.CANCEL_OPTION:
JOptionPane.showMessageDialog(FCDemo.this, "Cancelled","FCDemo",JOptionPane.OK_OPTION);
break;
case JFileChooser.ERROR_OPTION:
JOptionPane.showMessageDialog(FCDemo.this, "Error","FCDemo",JOptionPane.OK_OPTION);
}
}
};
btn.addActionListener(al);
pnl.add(btn);
setContentPane(pnl);
pack();
setVisible(true);
}
public String get_fileName(){
return fileName;
}
public static void main(String[] args)
{
FCDemo demo=new FCDemo("filechooser");
System.out.println("the file name is= "+demo.get_fileName());
}
}
由于某种原因,所选文件的目录未存储在名为fileName
的字符串变量中。当我将fileName
打印到控制台时,我得到null
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
文件名存储正确。在初始JFrame中按下按钮之前,请尝试观察控制台。在您看到FileChooser之前输出发生。很可能Swing使用额外的Thread来绘制UI。在绘制JFrame时,输出会并行打印。
答案 1 :(得分:1)
在选择文件之前执行主线程。这就是为什么文件名被打印为null的原因。要查看所选文件,请尝试将主线程休眠10秒钟。并选择你的文件。之后,您可以在main中看到所选文件。 使用:
public static void main(String[] args)
{
FCDemo demo=new FCDemo("filechooser");
try {
Thread.sleep(10000);
} catch (Exception e) {
// TODO: handle exception
}
System.out.println("the file name is= "+demo.get_fileName());
}