下面的代码是我代码的一部分。
“生成密钥..”按钮中的问题在文本区域没有任何内容!
我认为缓冲的阅读器无法获取文件路径..我不知道为什么?!
public class Finding_Candidate_Keys {
static String L[];
static int size;
static JFrame frame;
static JTextArea textArea;
static String TextAreaContent = "";
static File selectedFile;
static String filePath;
static JFileChooser fileChooser = new JFileChooser();
static File file;
static void displayJFrame()
{
frame = new JFrame("Advanced DB Project- Key Definition");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textArea = new JTextArea("");
textArea.setSize(250,250);
textArea.setEditable(false);
textArea.setVisible(true);
JScrollPane scroll = new JScrollPane(textArea);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
scroll.setPreferredSize(new Dimension(350, 350));
frame.add(scroll);
frame.setVisible(true);
JButton button = new JButton("Select File");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ae) {
textArea.setText("");
FileNameExtensionFilter filter = new FileNameExtensionFilter("Text Files (*.txt)", "txt");
fileChooser.setFileFilter(filter);
int returnValue = fileChooser.showOpenDialog(frame);
if (returnValue == JFileChooser.APPROVE_OPTION)
{
if (fileChooser.getSelectedFile() != null) {
selectedFile = fileChooser.getSelectedFile();
filePath = selectedFile.getAbsolutePath();
file = new File (filePath);
textArea.append("Opening: " + selectedFile.getName() + "\n");
}
}
else {
textArea.setText("");
textArea.append("Open command cancelled by user." + "\n");
}
}
});
frame.setVisible(true);
//********************
JButton showDialogButton = new JButton("Generate Keys..");
showDialogButton.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
textArea.setText("");
textArea.append(TextAreaContent);
}
});
frame.add(showDialogButton);
frame.setVisible(true);
//*********************
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(button);
frame.setPreferredSize(new Dimension(500, 500));
frame.setSize(400,460);
frame.setLocationRelativeTo(null);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) throws IOException{
SwingUtilities.invokeLater(
new Runnable()
{
public void run()
{
displayJFrame();
}
});
BufferedReader br = new BufferedReader(new FileReader(filePath));
.
.
.
请注意:如果我直接使用该文件的名称,它可以正常工作:
BufferedReader br = new BufferedReader(new FileReader("input.txt"));
insted of
BufferedReader br = new BufferedReader(new FileReader(filePath));
是谁能告诉我哪里出错了?
这也会在运行期间出现:
Exception in thread "main" java.lang.NullPointerException
at java.io.FileInputStream.<init>(FileInputStream.java:124)
at java.io.FileInputStream.<init>(FileInputStream.java:87)
at java.io.FileReader.<init>(FileReader.java:58)
at Finding_Candidate_Keys.main(Finding_Candidate_Keys.java:110)
答案 0 :(得分:2)
您永远不会初始化filePath
成员变量。因此,它将初始化为null
,这是成员对象的默认值。由于它将设置为null
,FileReader
的构造函数将抛出NullPointerException
。您可以通过初始化变量来解决此问题:
String filePath = "input.txt";
编辑:
如评论中所述,您似乎在displayJFrame
方法的条件语句中初始化它。传递给SwingUtilities.invokeLater
的runnable调用此方法。顾名思义,此方法不会直接运行传递给它的Runnable
,而是稍后会在另一个线程上执行它。因此,您的值不会被初始化,因为您的方法调用很可能在您使用main
方法中的值后运行。您必须等到方法完成,可能的解决方案是使用函数SwingUtilities.invokeAndWait
而不是SwingUtilities.invokeLater
。此方法将等待调用完成。
答案 1 :(得分:1)
您没有收到任何文字,因为您已将其设置为不显示文字。以下是@Stateless
public class BeanA {
@EJB
private BeanB beanB;
@PostConstruct
public void init(){
// trying to do some pre-configuration
beanB.configure(Map params);
}
public void doSomething(){
beanB.doSomething();
}
}
@Stateless
public class BeanB {
}
按钮的动作监听器中的方法:
Generate Keys..
您的textArea.setText("");
textArea.append(TextAreaContent);
初始化为空字符串,在您的类的初始化部分:
TextAreaContent
将...
static String TextAreaContent = "";
...
设置为您想要查看的内容。例如,你可以这样做:
TextAreaContent
对于错误,由于if (returnValue == JFileChooser.APPROVE_OPTION) {
if (fileChooser.getSelectedFile() != null) {
selectedFile = fileChooser.getSelectedFile();
filePath = selectedFile.getAbsolutePath();
file = new File(filePath);
textArea.append("Opening: " + selectedFile.getName() + "\n");
TextAreaContent = "You have selected some file: " + selectedFile.getName();
}
} else {
textArea.setText("");
textArea.append("Open command cancelled by user." + "\n");
TextAreaContent = "You chose no file";
}
方法,invokeLater
方法在另一个线程上异步执行,下一行在主线程中执行。在执行最后一行期间,displayJFrame
仍然可能未初始化,从而导致错误。要删除错误,您可以执行以下检查:
filePath