如何捕获system.err并向用户显示消息,而不是显示终端窗口?
不允许修改包含该行的类。代码如下:
Entry类:
public Entry(String paramString1, String paramString2, String paramString3, String paramString4, String paramString5)
{
this.firstName = paramString1;
this.lastName = paramString2;
this.street = paramString3;
this.town = paramString4;
if (paramString5.matches("[A-Z]{2}[0-9]{1,2} [0-9]{1,2}[A-Z]{2}")) {
this.postCode = paramString5;
} else {
System.err.printf("Bad postcode: '%s'\n", new Object[] { paramString5 });
this.postCode = "???";
}
}AddressBook类:
public String add(Entry paramEntry)
{
if (paramEntry == null)
return "Error: null entry";
if (this.data.contains(paramEntry)) {
return "Error: this entry already in the book";
}
boolean bool = this.data.add(paramEntry);
if (bool) {
return " entry added";
}
return "entry could not be added";
}扩展条目类:
public class Personal extends Entry
{
private String dob;
public Personal(String firstName, String lastName, String street, String town, String postcode, String theDOB)
{
super(firstName, lastName, street, town, postcode);
dob = theDOB;
}当前从GUI类添加条目的调用:
entry = Personal(firstName, lastName, street, town, postcode.toUpperCase(), dob);
message = addressbook.add(entry);如果我现在输入了一个错误的邮政编码,我会看到终端窗口显示"Bad poscode:“,然后用?创建一个条目。作为邮政编码。我希望能够在不添加条目的情况下提醒请求另一个输入的用户。但是,我不知道如何在不更改Entry类的情况下做到这一点(不允许修改Entry或AddressBook类)。
发布于 2013-05-01 17:39:49
您可以使用
public static void main(String... ignored) {
System.setErr(new PrintStream(new OutputStream() {
private StringBuilder line = new StringBuilder();
@Override
public void write(int b) throws IOException {
if (b == '\n') {
String s = line.toString();
line.setLength(0);
// TODO fill in what you want to do
System.out.println("ERR " + s + " ERR");
} else if (b != '\r') {
line.append((char) b);
}
}
}));
System.err.println("Hello World");
new Throwable("HERE").printStackTrace();
}打印
ERR Hello World ERR
ERR java.lang.Throwable: HERE ERR
ERR at Main.main(Main.java:24) ERR发布于 2013-05-01 17:39:52
为什么不在创建对象时在Personal类本身做所有的验证检查呢?确保只创建那些具有有效数据的对象。解决了你的问题。
我会说做这些检查,并向他显示person类本身中的所有错误。
https://stackoverflow.com/questions/16315712
复制相似问题