2014-02-20 39 views
0

這是使用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到控制檯,我得到空 任何人都可以幫我解決這個問題嗎?

回答

1

您的主線程在選定文件之前執行。這就是文件名被打印爲空的原因。要查看您選擇的文件,請嘗試將主線程休眠10秒鐘。並選擇你的文件。之後,您可以看到主要選定的文件。 使用:

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()); 
} 
+0

如果用戶花費超過10秒鐘的時間來選擇文件,該怎麼辦? – immibis

+1

這只是查看所選文件名的一個示例。要獲取文件名,使用的方法是不正確的。 – Rahul

+0

你如何建議我得到文件名呢? – Anish6595

1

文件名正確存儲。嘗試在按下初始JFrame中的按鈕之前觀察控制檯。在你看到FileChooser之前,輸出會發生。 Swing最有可能使用額外的Thread來繪製UI。 JFrame被繪製時,輸出並行打印。

+0

所以目錄是存儲在變量fileName? – Anish6595

+0

事實上,看到拉胡爾的答案,它包含的細節。 – omgBob