JSP中的Java代码有什么错误?

JSP中的Java代码有什么错误?,java,javascript,jsp,scriptlet,Java,Javascript,Jsp,Scriptlet,这是我的javascript RemovableStorageEventListener listener = new RemovableStorageEventListener() { public void inserted(Storage storage) { out.write("\n\t\tenableButton();\n\t"); } public void removed(Storage storage) { out.write("\n\t\tdisableButto

这是我的javascript

RemovableStorageEventListener listener = new RemovableStorageEventListener() { 
public void inserted(Storage storage) {
  out.write("\n\t\tenableButton();\n\t");
} 
public void removed(Storage storage) {
  out.write("\n\t\tdisableButton();\n\t");
} }; 

BundleContext bc = AppManager.getInstance().getBundleContext();
StorageManager sm = StorageManager.getInstance(KSFUtility.getInstance().getApplicationContext(bc));
sm.addListener(listener);

您必须将
设置为out
变量
final
,否则您将无法在
匿名类中访问它(在您的情况下,在
RemovableStorageEventListener的实现中)

Java不支持true(Java 8应该支持它们),即使使用像您在这里使用的匿名类(
new
RemovableStorageEventListener(){…}`)看起来像一种闭包

变量
out
是局部变量。使用匿名类创建的对象可能会一直持续到保存
out
变量的块完成之后。当它完成时,变量(
out
)将从堆栈中清除,因此它将不再存在。同时,匿名类对象引用该变量。如果匿名类对象在清理变量后试图访问该变量,那么事情就会变得非常糟糕


通过使其成为
final
,它不再是真正的变量,而是一个常量。

您收到的具体错误是什么?无法在另一个方法中定义的内部类中引用非final变量。我无法使其成为final…因为eclipse自动生成Start\u jsp.java。
RemovableStorageEventListener listener = new RemovableStorageEventListener() { 
public void inserted(Storage storage) {
  out.write("\n\t\tenableButton();\n\t");
} 
public void removed(Storage storage) {
  out.write("\n\t\tdisableButton();\n\t");
} }; 

BundleContext bc = AppManager.getInstance().getBundleContext();
StorageManager sm = StorageManager.getInstance(KSFUtility.getInstance().getApplicationContext(bc));
sm.addListener(listener);
function enableButton(){
document.getElementById('scan').disabled=false;
}

function disableButton(){
document.getElementById('scan').disabled=true;
}