为什么它不起作用?(通过java中的Runnable将函数作为参数发送)
我有一个java项目,我有一个问题 目标描述: 在表单A(为什么它不起作用?(通过java中的Runnable将函数作为参数发送),java,runnable,Java,Runnable,我有一个java项目,我有一个问题 目标描述: 在表单A(MainForm)中,我有一些按钮处于enable(false)模式。 我有一个函数LockOrUnlockButtons(),用于检查某些条件,如果该函数返回true,则按钮将处于启用(true)状态。 我想为“表单B关闭事件”(AddCstmrForm)调用此函数 我试图通过接收此函数作为参数来解决此目标: public Void AddCstmrForm(Runnable myFunc) { ..... ....
MainForm
)中,我有一些按钮处于enable(false)
模式。
我有一个函数LockOrUnlockButtons()
,用于检查某些条件,如果该函数返回true,则按钮将处于启用(true)状态。
我想为“表单B关闭事件”(AddCstmrForm
)调用此函数
我试图通过接收此函数作为参数来解决此目标:
public Void AddCstmrForm(Runnable myFunc) {
.....
....
}
问题:
但是在表单A(MainForm
)中,当我将函数LockOrUnlockButtons()
发送给表单B的构造函数(AddCstmrForm
)时,我得到了错误:
Constructor AddCstmrForm in class AddCstmrForm cannot be applied to given types.
required: no arguments.
founf: Void
我做错了什么
哈雷尔
代码:
在表格A中,(MainForm
):
*在表格B(AddCstmrForm
)中:*
这不是构造函数:
public Void AddCstmrForm(Runnable myFunc) throws Exception {
initComponents();
...
}
它是一个名为AddCstmrForm
的方法,返回类型为Void
我想你的意思是:
public AddCstmrForm(Runnable myFunc) throws Exception {
initComponents();
...
}
您还需要创建一个Runnable
来调用lockorlunlockbuttons
方法。例如:
AddCstmrForm addCstmr = new AddCstmrForm(new Runnable() {
@Override public void run() {
LockOrUnlockButtons();
}
});
除非您使用的是Java 8,否则您可以编写:
AddCstmrForm addCstmr = new AddCstmrForm(this::LockOrUnlockButtons);
此外,您的锁定或解锁按钮可以大大简化:
private void LockOrUnlockButtons() throws Exception {
boolean anyCustomers = !sngltn.GetAllCustemers().isEmpty();
buttonUpdateAddActivityCstmrCrd.setEnabled(anyCustomers);
buttonDeleteCstmrCrd.setEnabled(anyCustomers);
buttonQueriesViewData.setEnabled(anyCustomers);
}
(我还强烈建议您遵循Java命名约定,除非您确实需要,否则使用返回类型void
,而不是void
,并避免引发异常
。从外观上看,您应该重新审视您的异常处理方法。)这不是一个构造函数:
public Void AddCstmrForm(Runnable myFunc) throws Exception {
initComponents();
...
}
它是一个名为AddCstmrForm
的方法,返回类型为Void
我想你的意思是:
public AddCstmrForm(Runnable myFunc) throws Exception {
initComponents();
...
}
您还需要创建一个Runnable
来调用lockorlunlockbuttons
方法。例如:
AddCstmrForm addCstmr = new AddCstmrForm(new Runnable() {
@Override public void run() {
LockOrUnlockButtons();
}
});
除非您使用的是Java 8,否则您可以编写:
AddCstmrForm addCstmr = new AddCstmrForm(this::LockOrUnlockButtons);
此外,您的锁定或解锁按钮可以大大简化:
private void LockOrUnlockButtons() throws Exception {
boolean anyCustomers = !sngltn.GetAllCustemers().isEmpty();
buttonUpdateAddActivityCstmrCrd.setEnabled(anyCustomers);
buttonDeleteCstmrCrd.setEnabled(anyCustomers);
buttonQueriesViewData.setEnabled(anyCustomers);
}
(我还强烈建议您遵循Java命名约定,除非您真的需要,否则使用返回类型void
,而不是void
,并避免抛出异常
。从外观上看,您应该重新审视您的异常处理方法。)可运行的”不仅仅是一个任意函数;它是实现可运行接口的类的实例。坦率地说,您使用的语法非常有创意;但这完全是错误的。一个“可运行的”不仅仅是一个任意函数;它是实现可运行接口的类的实例。坦率地说,您使用的语法非常有创意;但这完全是错误的。好的。我把我的“非构造函数”改为“真正的构造函数”!但是,当我想添加CreateArunnable来调用我的LockOrUnlockButtons方法时,我被卡住了。我想打电话给她,让她参加一个关于关闭AddCstmrForm的活动,你能给我更多的指导吗?我应该写什么?你是否已经修复了你试图创建一个Runnable
?但是我仍然陷入困境,我应该为Runnable写什么来调用我的LockOrUnlockButtons方法。我想打电话给她参加一个结束AddCstmrForm的活动,你能告诉我更多我应该写什么吗?好的。我把我的“非构造函数”改为“真正的构造函数”!但是,当我想添加CreateArunnable来调用我的LockOrUnlockButtons方法时,我被卡住了。我想打电话给她,让她参加一个关于关闭AddCstmrForm的活动,你能给我更多的指导吗?我应该写什么?你是否已经修复了你试图创建一个Runnable
?但是我仍然陷入困境,我应该为Runnable写什么来调用我的LockOrUnlockButtons方法。我想打电话给她参加一个结束AddCstmrForm的活动,你能给我更多的指导吗?我应该写什么?