<%RemovableStorageEventListener listener = new RemovableStorageEventListener() {
public void inserted(Storage storage) {%>
enableButton();
<%}
public void removed(Storage storage) {%>
disableButton();
<%} };
BundleContext bc = AppManager.getInstance().getBundleContext();
StorageManager sm = StorageManager.getInstance(KSFUtility.getInstance().getApplicationContext(bc));
sm.addListener(listener);
%>
我在
中的Start_jsp.java中收到错误out.write( “\ n \吨\ tenableButton(); \ n \ t” 的);和 out.write( “\ n \吨\ tdisableButton(); \ n \ t” 的);
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);
这是我的javascript
function enableButton(){
document.getElementById('scan').disabled=false;
}
function disableButton(){
document.getElementById('scan').disabled=true;
}
答案 0 :(得分:0)
您必须制作out
变量final
,否则您将无法在anonymous
类中访问它(在您的情况下,在{{1}的实现中}})
Java不支持true closures(Java 8应该支持它们),即使使用像你在这里使用的匿名类(RemovableStorageEventListener
RemovableStorageEventListener(){...}` )看起来像是一种封闭。
变量new
是局部变量。使用匿名类创建的对象可能会持续到保存out
变量的块完成之后。当它完成时,变量(out
)将从堆栈中清除,因此它将不再存在。同时,匿名类对象引用该变量。如果匿名类对象在清理完变量后尝试访问该变量,那将会发生严重错误。
通过使它out
,它不再是真正的变量,而是一个常数。