これは電卓アプリです。コンパイルしようとすると、次のメッセージが表示されますunreported exception javax.script.ScriptException; must be caught or declared to be thrown
クラスが に設定されているためだと思いActionEvent
ます。私は学生なので、まだ勉強中です:)
何か案は?ありがとう
\
次のことができます。
// .. 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);
// ...
これはそれであるはずです。
このactionPerformed
メソッドでは、行se.eval(createEquasion);
は throwingScriptException
です。この例外を処理する必要があります。
以下のコードを追加して、クラスをコンパイルします
Object result = null;
try {
result = se.eval(createEquasion);
} catch (ScriptException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if (result != null)
finalAnswer = result.toString();
ScriptEngine.html#eval
2つ投げることができますException
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{...}
詳細情報を見つけてください -