Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从ubuntu 12.04移动到10.04时java中出现异常错误_Java_Exception_Compiler Errors - Fatal编程技术网

从ubuntu 12.04移动到10.04时java中出现异常错误

从ubuntu 12.04移动到10.04时java中出现异常错误,java,exception,compiler-errors,Java,Exception,Compiler Errors,我正在使用一个数据采集软件。我正在我的ubuntu 12.04笔记本电脑上编写代码。我创建的方法之一是 public double getValueFrom(String widgName) {//Read data from user input text fields KmaxWidget widg = tlsh.getKmaxWidget(widgName); String str = widg.getProperty("TEXT"); double num =

我正在使用一个数据采集软件。我正在我的ubuntu 12.04笔记本电脑上编写代码。我创建的方法之一是

public double getValueFrom(String widgName) {//Read data from user input text fields
    KmaxWidget widg = tlsh.getKmaxWidget(widgName); 
    String str = widg.getProperty("TEXT");

    double num = 0;
    try {
        num = Double.parseDouble(str);
    }
    catch (Exception e) {
        tlsh.setProperty("STATUSSTR", "Attention! Channel and Energy must be double precision number. i.e. 10, 3.14 etc.");
        tlsh.showWarning("Choose a double precision number.");
        throw e;
    }
    return num; 
} // getValueFrom
当我在笔记本电脑上编译代码时,它不会出错。当我将代码复制到ubuntu 10.04桌面时,我会得到一个异常代码

unreported exception java.lang Exception: must be caught or declared to be thrown
throw e;
^
我想到的第一件事是他们有不同版本的java。确实是这样,所以我更新了10.04的java,但同样的错误再次出现。你知道哪里有问题吗

EDIT我也在方法的参数后添加了
抛出异常
,但每当调用此方法时,我都会得到错误(在两个系统上)


问题的出现是因为:

 throw e;
由于要从catch块中抛出java.lang.Exception对象,因此方法签名必须包含throws子句,说明这一点,因此方法签名现在变为(否则编译器会抱怨):


此更改将解决问题。

由于异常说明此函数应该通过异常到父类,因此您可以通过如下所示的异常将函数定义为

public double getValueFrom(String widgName) throws Exception
{
 // body
}

该代码在任何版本的Java中都无效。我对你声称它是在你的笔记本电脑上编译的深表怀疑。你不能从没有声明的方法中抛出
java.lang.Exception
。你不能在任何java版本中编译它。@JonSkeet:我如何证明上述代码在我的笔记本电脑上编译?在“通道”下方的框中,我输入了“p”以使警告框弹出@Thanos实际上JonSkeet是对的。@Thanos:如果您能提供一个简短但完整的程序供您编译,该程序包含
抛出新的java.lang.Exception()(未捕获它),该方法不声明它抛出
Throwable
异常
。我怀疑你写这样一个程序会很困难。非常感谢你的回答!当我添加
抛出异常时
我得到错误
未报告的异常;无论何时调用我的方法,都必须捕获或声明抛出
,因为这是一个已检查的异常,所以应该如此。在调用getValueFrom的地方,您必须捕获或重新抛出异常。这是一个基本的java概念。您需要做的是,无论您在何处调用此方法,都要在该方法定义中添加一个throws Exception子句,最后您可以捕获位于调用层次结构最上端的。这是一种粗糙的方法,因为我不知道您的业务用例,但肯定会有所帮助。@Thanos:我怀疑您会发现问题已经转移到调用该方法的代码上。老实说,使用裸
Exception
是个坏主意。您对Java中的检查异常有多了解?@JonSkeet:我以前从未在Java中使用过
异常
,所以我对这件事的理解有点……非常感谢您的回答!当我添加
抛出异常时
我得到错误
未报告的异常;无论何时调用我的方法,都必须捕获或声明要抛出
。您需要在父类中处理异常,或者像上面那样在异常发生时抛出异常
  public double getValueFrom(String widgName) throws Exception
public double getValueFrom(String widgName) throws Exception
{
 // body
}