我正在尝试编写一个程序来读取网页。以下代码无效:
String[] lines;
try {
lines = loadStrings(url);
}
catch(IOException e) {
return;
}
但是此代码是:
try {
String[] lines = loadStrings(url);
}
catch(IOException e) {
return;
}
在第二个示例中,我无法使用代码,因为稍后需要在程序中使用变量“ lines”。还有其他方法可以捕获此异常(504错误)吗?
示例:
PFont f;
String webpage;
void setup() {
size(400, 400);
f = createFont("Arial", 16);
}
void draw() {
background(255);
textFont(f);
fill(0);
text("Press Return to Start", 25, 90);
}
void keyPressed() {
if (key == '\n') {
webpage = "processing.org";
loadData(webpage);
}
}
void loadData(String webpage) {
String url = "www.processing.org";
try {
String[] lines = loadStrings(url);
}
catch(IOException e) {
return;
}
saveStrings("Stuff on Webpage.txt", lines);
}
这是程序崩溃的地方:
java.io.IOException: Server returned HTTP response code: 504 for URL: http://www.processing.org/
在发生此异常的情况下,我希望程序退出loadData函数,并继续keyPressed。
答案 0 :(得分:0)
让我们看一下这段代码:
String message;
if(random(1) < .5) {
message = "hello";
}
println(message);
此代码将产生一个错误,提示message cannot be resolved to a variable
。这是因为编译器足够聪明,可以知道根据if
语句的作用,message
可能不包含值。 Processing / Java不会为本地变量分配默认值。
我们可以通过自己分配默认值来解决此编译器错误:
String message = null;
if(random(1) < .5) {
message = "hello";
}
println(message);
现在message
的默认值为null
,它的默认值与素描/类变量匹配。
我们可以解决此问题的另一种方法是将println()
调用放在if
语句中:
String message;
if(random(1) < .5) {
message = "hello";
println(message);
}
我们可以简化一下:
if(random(1) < .5) {
String message = "hello";
println(message);
}
现在,返回您的代码:
try {
String[] lines = loadStrings(url);
}
catch(IOException e) {
return;
}
saveStrings("Stuff on Webpage.txt", lines);
这不起作用,因为lines
是在try
块内声明的,所以它在该块外超出范围,您不能使用它之后。
String[] lines;
try {
lines = loadStrings(url);
}
catch(IOException e) {
return;
}
saveStrings("Stuff on Webpage.txt", lines);
这不起作用,因为编译器不够聪明,无法看到该return
语句。它只知道代码的一个分支跳过了lines = loadStrings(url);
行,因此知道您尝试使用lines
时可能没有分配它。
您可以自己修改默认值,也可以将所有内容移动到同一块内,就像我们在上面的简化示例中所做的那样。