如果我点击btn_check,我想这样做,错误消息将出现在txt_msg(JTExtArea)上。我使用命令行完成了这段代码,它可以工作。只是我想在我的GUI中应用它。
这是我的主要课程
public void actionPerformed(ActionEvent e) {
Object click = e.getSource();
if (click == btn_check){
BufferedReader br = null;
try {
String line;
br = new BufferedReader(new FileReader(txt_file.getText()));
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
} // end while in try
String everything = sb.toString();
} catch (IOException error) {
error.printStackTrace();
} finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
} //end try - catch - finally
File filename = new File(txt_area.getText());
try {
txt_msg.setText("Yes in Main");
// Scan file - read tokens
Scanner scanner = new Scanner(new UnicodeEscapes(new FileReader(filename)));
// Parse the file
parser parser = new parser(scanner);
parser.parse();
parser p = new parser(txt_msg); //this is where I want to pass my text area to parser class
} catch (Exception err) {
syntax_err = true;
}
}
}
这是我的解析器类
JTextArea new_txt_msg;
public parser(JTextArea a) {
new_txt_msg = a;
}
public void report_error(String message, Object info) {
StringBuffer m = new StringBuffer("Error ");
if (info instanceof java_cup.runtime.Symbol)
m.append( "("+info.toString()+")" );
m.append(" : "+message);
System.out.println(m); //m holds the error message
}
我尝试使用new_txt_msg.setText(m.toString())
,但它没有用。
答案 0 :(得分:0)
从你提供的代码中不清楚,但是从我在这里看到的你创建了一个新的解析器对象,你没有像之前那样调用parse()方法。如果这是你需要的问题:
我建议但是,如果可以的话,是让你的parse()方法返回错误信息(或者一个更复杂的对象,保存信息和某种返回代码),然后调用setText( )JTextArea上的方法直接在actionPerformed()内部。通过这种方式,您将解耦纯计算(输入解析)和GUI管理(取消计算结果)。
另外,请查看SwingWorker课程;如果您的解析可能是一个很长的操作,从actionPerformed()方法调用它可能会挂起您的GUI