2013-10-17 1 views
0

나는 당신의 이름과 이름을 물어 보는 프로그램을 가지고 있습니다. OutputStream을 사용하여 작업 영역에 저장된 파일의 이름을 저장했습니다. BufferedReader를 사용하여 파일을 읽지 만 JOptionPane.YES_NO_DIALOG에서 예를 클릭하면 파일의 이름이 사용됩니다. 나는 시도하고 및 성명 경우 자신의 옵션 JOptionPane을 함께 JOptionPane를 사용하는 경우 JOptionPane에 ... 다음 text.setText (savedName), 그러나 그것은 단지 "에 오신 것을 환영합니다 널 널 (null)"버퍼 된 리더

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 

public class BingoHelper extends JFrame implements WindowListener, ActionListener{ 
JTextField text = new JTextField(); 

//JLabel bg = new JLabel("helo"); 

private JButton b; { 
     b = new JButton("Click to enter name"); 
     } 

JPanel pnlButton = new JPanel(); 

public static String fn; 
public static String sn; 

public static int n; 

File f = new File("test.txt"); 

public void actionPerformed (ActionEvent e){ 

    Object[] yesNo = {"Yes", 
         "No",}; 
    n = JOptionPane.showOptionDialog(null,"Would you like to use previously entered data?","Welcome Back?",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE, null, yesNo,yesNo[1]); 

    if (n == JOptionPane.NO_OPTION){  
     for(fn=JOptionPane.showInputDialog("What is your first name?");!fn.matches("[a-zA-Z]+");fn.isEmpty()){ 
      JOptionPane.showMessageDialog(null, "Alphabet characters only."); 
      fn=JOptionPane.showInputDialog("What is your first name?"); 
     } 
     for(sn=JOptionPane.showInputDialog("What is your second name?");!sn.matches("[a-zA-Z]+");sn.isEmpty()){ 
      JOptionPane.showMessageDialog(null, "Alphabet characters only."); 
      sn=JOptionPane.showInputDialog("What is your second name?"); 
     } 

    } 
    //JOptionPane.showMessageDialog(null, "Welcome " + fn + " " + sn + ".", "", JOptionPane.INFORMATION_MESSAGE); 
    text.setText("Welcome " + fn + " " + sn + "."); 
    b.setVisible(false); 
    b.setEnabled(false); 
    text.setVisible(true); 
    text.setBounds(140,0,220,20); 
    text.setHorizontalAlignment(JLabel.CENTER); 
    text.setEditable(false); 
    text.setBackground(Color.YELLOW); 
    pnlButton.setBackground(Color.DARK_GRAY); 
    writeToFile(); 
    //bg.setVisible(true); 
} 

private void writeToFile() { 

    String nameToWrite = fn; 
    OutputStream outStream = null; 
    try { 
     outStream = new FileOutputStream(f); 
     outStream.write(nameToWrite.getBytes()); 
     BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f))); 
     String savedName = br.readLine(); 

     //System.out.println(savedName); 
     br.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 

    } finally { 
     if (null != outStream) { 
      try { 
       outStream.close(); 
      } catch (IOException e) { 
       // do nothing 
      } 
     } 
    } 
} 

답변

0

로 나오는 경우 말했다했습니다 인덱스 사용자가 선택하는 옵션의 ... 사용자가 사용자가 "No"를 선택하면 "예"다음 JOptionPane0을 반환하거나 것입니다 선택하는 경우, 귀하의 경우입니다

를 반환합니다, 그것을 반환 할 것입니다 1

그래서, 대신 JOptionPane.NO_OPTION을 사용하는 당신은 당신이 점점 더 얻을 경우 예기치 않은 동작이 발생할 수 있으므로

Object[] yesNo = {"Yes", 
        "No",}; 
n = JOptionPane.showOptionDialog(null,"Would you like to use previously entered data?","Welcome Back?",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE, null, yesNo,yesNo[1]); 

if (n == 1){  
    //... 
} 

가 나는 또한 강하게, 이러한 맥락에서 static 필드 참조를 사용하지 않도록하는 것이 좋습니다 것입니다 ... 예를 들어, 1를 사용할 필요 그런 다음 실행중인 클래스의 인스턴스 하나)

+0

감사합니다. 그러나이 프로그램의 파일 스트리밍 부분에 대해 더 자세히 알고 싶습니다. 다음에 프로그램을 실행할 때 입력 대화 상자에 입력 한 내용 (첫 번째 메시지 대화 상자에서 아니오를 클릭 한 후)을 저장하는 프로그램이 필요합니다. 다음 번에 프로그램을 실행하고 옵션 대화 상자에서 예를 클릭하면 사용자가 마지막으로 입력 한 내용을 입력하라는 텍스트 필드를 얻으려고합니다. – JavaScrub