2011-04-01 63 views
1

Integer.parseInt("5")Long.parseLong("5")在Eclipse Expressions窗口中抛出UnsupportedOperationExceptionparseInt和parseLong引发一个UnsupportedOperationException异常

Eclipse Environment Screenshot

我想这也是我在运行时获得,但作为Eclipse的新的异常,我不知道如何找到的e调试会话中的类型:

public static long longTryParse(String text, long fallbackValue) { 
    try { 
    return Long.parseLong(text); 
    } catch (Exception e) { 
    return fallbackValue; // When stopping at a breakpoint here, Eclipse says that e is of type 'Exception'. Well, that's informative. 
    } 
} 

所以......

  1. 这些是有效的声明?
  2. 如果是这样,为什么我会得到异常?
  3. (重要性不大)为什么Eclipse在调试会话期间不会说e的类型是UnsupportedOperationException而不是Exception?

谢谢!

+0

重启Eclipse与clean选项,也许它可以帮助 – 2011-04-01 06:25:30

回答

2

这些有效的陈述?

是...在普通Java程序的上下文中作为Java表达式。

在Eclipse调试器表达式计算器的上下文中,我不确定。

如果是这样,为什么我会得到异常?

我并不确定,但我怀疑这与调试器本身有关。

  • 一种可能性是您正在错误地使用表达式评估功能。

  • 另一种可能性是,这是Eclipse调试器中的错误,或者Eclipse调试器与JVM中的调试代理之间不匹配。

有一两件事,我不知道的是,parseIntparseLong方法本身不乱扔UnsupportedOperationException。 (理论上,它们可能是因为它是一个未经检查的例外,但我检查了这两种方法的源代码,并且如果以正常方式执行,代码无法这样做)


Google查询 - “site:eclipse.org + UnsupportedOperationException JDI” - 在Eclipse问题数据库和新闻组/邮件列表中显示了很多匹配。

在某些情况下,它看起来像问题是目标平台的JDI/JNDI实现不完整。这可能是你的问题吗?你提到你正在做Android开发...

+0

感谢。为了澄清,我在表达式窗口中得到一个异常,但是在运行时String text ==“5”。我正在运行Eclipse Classic 3.6.2和一些针对该项目的Android API。 JVM的版本为1.6.0_24。 – 2011-04-01 06:50:22

1

根据java docs parseInt只能抛出NumberFormatException,这意味着UnsupportedException来自代码中的不同位置。

parseInt函数

public static int parseInt(String s) 
        throws NumberFormatException 

将字符串参数作为有符号的十进制整数。字符串中的字符 必须全部为十进制的 数字,但第一个 字符可能是ASCII减号 ' - '('\ u002D')以指示负值 值。返回的结果整数值为 ,就好像参数 和基数10被作为 parseInt(java.lang.String,int) 方法的 参数给出一样。

0

尝试将sysout放在catch块中,它显示异常的类型。

System.out.println(e); 

而且作为苏雷什提到它只能抛出NumberFormatException的

0

我觉得你应该先尝试分析文本变量,并把它放在另一个长变量和打印。这样你就可以知道解析是否完成。所以你会知道问题在哪里。

0

异常是e的声明类型,这是通常在Java透视图的工具提示中显示的内容。如果eclipse没有告诉你更多的信息,首先确保你处于调试的角度(而不是Java角度)。

我想你的eclipse工具提示配置有问题。您应该在变量视图中看到关于异常的更多信息(如果它未打开,请尝试Window/Show View/Variables)。另外,当调试在断点处停止时,可以在源代码中标记e,并按CTRL + I(检查)。你应该得到一个弹出窗口告诉你更多关于e。

编辑:这是关于发现更多关于e。我同意以前的海报,你通常不能从你的代码中得到一个UnsupportedOperationException。似乎问题在于调试无法正常工作。

1

我不认为它与parseInt或parseLong有关。 异常明确指定“Exception processing async thread queue”异常处理异步线程队列

当在调试模式下使用Eclipse时,旧版本的Eclipse已知会抛出类似的异常。但我认为这些已在新版本中修复。

我知道你的代码是可以的,因为如果出现任何错误,它会抛出“NumberFormatException”。

我甚至试过一个例子来确认。

Long lVal = Long.parseLong("5"); 
System.out.println("lVal = " + lVal); 

产量为

LVAL = 5

没有例外