更新:对不起误导你们中的一些人,这里有更详细的代码:
我试图将String[]
数组解析为int[]
数组。我从JTextArea
获取字符串,生成String[]
,然后int[]
。
array1String="asd, lala, 22";
array2String="1,2,3";
String [] arr1 = array1String.split(",");
String [] arr2 = array2String.split(",");
int[] array1 = new int[arr1.length];
for (int i=0; i<arr1.length; i++) {
try {
array1[i] = Integer.parseInt(arr1[i]);
} catch (Exception ex) {
resultLabel.setText(ex.getMessage());
}
}
int[] array2 = new int[arr2.length];
for (int i=0; i<arr2.length; i++) {
try {
array2[i] = Integer.parseInt(arr2[i]);
} catch (Exception ex) {
resultLabel.setText(ex.getMessage());
}
}
parseInt()
方法将任何乱码解释为&#34; 0&#34;。因此,不是获得异常,而是将每个对应于gibberish String []成员的int []成员作为ZERO。但这不是我想要的。我想捕获异常以将消息传递给JLabel。我不想让它愉快地吃任何废话并使它成为&#34; 0&#34;。我错过了什么吗?我怀疑这不应该如何起作用。
结果数组看起来像
array1 [0,0,22]
array2 [1,2,3].
没有什么可以去Label,好像异常从未发生过。由于我没有更改代码,只处理异常更改。
答案 0 :(得分:2)
设置JLabel
文本的代码丢失了,但我猜它是在try-catch-block之后,只使用x
的值,默认为0。这个问题的首选解决方案是更新try-catch-block中的文本,如下所示:
try{
int x = ...
resultLabel.setText("" + x);
}catch(Exception ex){
resultLabel.setText(ex.getMessage());
}
一般情况下,如果生成数据可能会抛出异常,建议处理try-catch-block中的数据,从而生成数据。
编辑:
此代码存在一个简单问题:int
没有undefined
值之类的任何属性。最简单的方法是使用Integer[]
代替null
作为undefined
- 值:
Integer x;
try{
x = ...;
}catch(Excpetion ex){
resultLabel.setText(ex.getMessage());
x = null;
}
答案 1 :(得分:1)
int的默认值为0.由于得到异常并且没有为x分配任何内容,因此得到0
答案 2 :(得分:0)
首先,如果你在TRY块中使用int x = Integer.parseInt(str);
,那么这意味着你的x
成为TRY块的局部变量,你不能在TRY之外使用它,甚至不能在CATCH块中使用它。因此,如果发生异常,x=0
的问题甚至不会发生,因为x
会失去其范围。
如果你在TRY块之外声明x
(以便你可以在CATCH内部或在TRY块之外使用它),那么你已经初始化它( ofcourse with value如0或-1 )那么x=0
或x=-1
应该是x
的预期值
您的关注:
我想捕获异常以将消息传递给JLabel。
考虑以下方法,您将捕获异常,计算错误消息,然后将/设置传递到您的标签字段等。
与其他方法相比,此方法的 优势是您需要重复resultLabel.setText()
的代码,您正在使用成功消息或失败消息更新您的labelMessage
使用它。
如果这不能完全解决您的问题,请随时告诉我。
String labelMessage = null;
String str = "asd";
try {
int x = Integer.parseInt(str);
labelMessage = //Whatever you want...
} catch (NumberFormatException e) {
e.printStackTrace();
labelMessage = "Error message = " + e.getMessage(); // OR some other menaingful message you want
}
//Set to you label field...