【问题标题】:Unreported exception javax.script.ScriptException; must be caught or declared to be thrown未报告的异常 javax.script.ScriptException;必须被抓住或宣布被扔掉
【发布时间】:2013-03-04 05:39:36
【问题描述】:

这是一个计算器应用程序。当我尝试编译时,会出现以下消息unreported exception javax.script.ScriptException; must be caught or declared to be thrown

我有一种感觉是因为班级设置为ActionEvent。我是学生所以我还在学习:)

有什么想法吗?谢谢

\

【问题讨论】:

  • 您的ScriptEngineManager 代码在哪里?
  • 您如何处理代码中的异常?您只是直接向您的用户提供异常,还是将其包装在错误消息中?

标签: java events action


【解决方案1】:

您可以执行以下操作:

// .. other imports
import javax.script.ScriptException;

// .. the rest of your code
if(source==buteq){
  try{
     ScriptEngineManager manager = new ScriptEngineManager();
     ScriptEngine se = manager.getEngineByName("JavaScript");        
     Object result = se.eval(createEquasion);
     finalAnswer = result.toString();
     answer.setText(finalAnswer);
  catch(ScriptEngineManager e) {
     // handle exception
     System.err.println("Error evaluating the script: " + e.getMessage());
  }
}

如果您正在处理方法之外的任何类型的异常,您可以在方法签名上添加throws 声明:

// .. other imports
import javax.script.ScriptException;

// your method signature
public void actionPerformed (ActionEvent e) throws ScriptException {

// ...

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine se = manager.getEngineByName("JavaScript");        
Object result = se.eval(createEquasion);
finalAnswer = result.toString();
answer.setText(finalAnswer);

// ...

应该是这样的。

【讨论】:

    【解决方案2】:

    在您的 actionPerformed 方法中,se.eval(createEquasion); 行正在抛出 ScriptException。你必须处理这个异常。

    添加下面的代码来编译类

    Object result = null;
                try {
                    result = se.eval(createEquasion);
                } catch (ScriptException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                if (result != null)
                    finalAnswer = result.toString();
    

    【讨论】:

      【解决方案3】:

      ScriptEngine.html#eval 可以抛出两个Exception

      1. NullPointerException
      2. 脚本异常

      NullPointerException 是 RuntimeException 所以编译器不会强制你处理这个。但是ScriptException 是检查异常,所以编译器会强制你处理这个Exception 要么将代码块插入try catch 或抛出它。

      try-catch

      if(source==buteq){
             try{
                  ScriptEngineManager manager = new ScriptEngineManager();
                  ScriptEngine se = manager.getEngineByName("JavaScript");        
                  Object result = se.eval(createEquasion);
                  finalAnswer = result.toString();
                  answer.setText(finalAnswer);
             }catch(ScriptException se){
                  ...
             }
      }
      

      ScriptException 类声明 -

      public class ScriptException extends Exception{...}

      请查找更多信息-

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多