缓冲读卡器

时间:2013-10-17 23:49:45

标签: java dialog streaming

我有一个程序,要求您提供您的名字和第二个名字。我使用OutputStream将第一个名称保存在工作区中存储的文件中。我使用BufferedReader来读取文件,但我试图得到它,如果该人在JOptionPane.YES_NO_DIALOG上单击是,它将使用文件中的名称!我已经尝试过,如果Statement声明如果JOptionPane ...然后是text.setText(savedName),但它只是出现为“Welcome null 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
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

当您JOptionPane使用自己的选项JOptionPane时,将返回用户选择的选项索引 ...

也就是说,在您的情况下,如果用户选择“是”,则JOptionPane将返回0,或者如果用户选择“否”,则会返回1

因此,您需要使用JOptionPane.NO_OPTION,而不是使用1,例如......

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字段引用,因为如果您运行的类的实例超过一个,可能会导致意外行为;)