Java 匿名类实现接口,不能有参数
我有一些代码,我正试图重新编译和理解,但我有一个不编译的方法,我希望找到好的解决办法。方法如下Java 匿名类实现接口,不能有参数,java,Java,我有一些代码,我正试图重新编译和理解,但我有一个不编译的方法,我希望找到好的解决办法。方法如下 private void launchEventPanel(String title) { EventQueue.invokeLater(new Runnable(title) { public void run() { JFrame myFrame = new JFrame(); myFrame.setTitle("Conference
private void launchEventPanel(String title) {
EventQueue.invokeLater(new Runnable(title) {
public void run() {
JFrame myFrame = new JFrame();
myFrame.setTitle("Conference Call");
myFrame.setIconImage(CallConference.this.myCore.myPanel.myIconManager.getPromptIcon(CallEMart.class.toString()));
myFrame.getContentPane().add(CallConference.this.myEventPanel, "Center");
myFrame.pack();
myFrame.setVisible(true); } }); }
EventQueue.invokeLater的第二行未编译,我得到错误匿名类实现接口,不能有参数
非常感谢您提供的任何帮助和解决方法。谢谢
private void launchEventPanel(final String title) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame myFrame = new JFrame();
myFrame.setTitle("Conference Call");
myFrame.setIconImage(CallConference.this.myCore.myPanel.myIconManager.getPromptIcon(CallEMart.class.toString()));
myFrame.getContentPane().add(CallConference.this.myEventPanel, "Center");
myFrame.pack();
myFrame.setVisible(true); } }); }
你完成了。尽管就我所见,您实际上并没有在代码中的任何地方使用title的值
你完成了。尽管就我所见,您实际上并没有在代码中的任何地方使用title的值。这是因为Runnable只是一个接口,它不接受任何参数作为匿名类。要绕过它,可以将final指定给上面的参数:
private void launchEventPanel(final String title) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame myFrame = new JFrame();
myFrame.setTitle("Conference Call");
myFrame.setIconImage(CallConference.this.myCore.myPanel.myIconManager.getPromptIcon(CallEMart.class.toString()));
myFrame.getContentPane().add(CallConference.this.myEventPanel, "Center");
myFrame.pack();
myFrame.setVisible(true); } }); }
这是因为Runnable只是一个接口,它不接受任何参数作为匿名类。要绕过它,可以将final指定给上面的参数:
private void launchEventPanel(final String title) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame myFrame = new JFrame();
myFrame.setTitle("Conference Call");
myFrame.setIconImage(CallConference.this.myCore.myPanel.myIconManager.getPromptIcon(CallEMart.class.toString()));
myFrame.getContentPane().add(CallConference.this.myEventPanel, "Center");
myFrame.pack();
myFrame.setVisible(true); } }); }
好吧,这就是它所说的,你不能给一个可运行的构造函数提供参数,因为没有构造函数——它是一个接口
相反,声明title final,并直接在内部类中使用它。好吧,它是这样说的,您不能给可运行的构造函数提供参数,因为没有构造函数-它是一个接口 相反,请声明title final,并直接在内部类中使用它。Runnable是一个接口,因此它不包含接受字符串的构造函数,这是您在以下行中执行的操作:EventQueue.invokeLaternew Runnablettle{ 如果您想在public void run中使用title,只需将title作为最后一个参数,您就可以在该方法中自由使用它。Runnable是一个接口,因此它不包含接受字符串的构造函数,您正在这一行中执行此操作:EventQueue.invokeLaternew runnablettle{
如果您想在public void run中使用title,只需将title作为最终参数,您就可以在该方法中自由使用它。正如消息所述:java.lang.Runnable是一个接口,因此您无法将title传递给其构造函数。 使用: 相反 请注意,标题不会在任何地方使用。如果您需要在Runnable中使用它,则需要将其声明为final:
private void launchEventPanel(final String title) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame myFrame = new JFrame();
myFrame.setTitle(title);
正如消息所说:java.lang.Runnable是一个接口,因此您不能将标题传递给它的构造函数。 使用: 相反 请注意,标题不会在任何地方使用。如果您需要在Runnable中使用它,则需要将其声明为final:
private void launchEventPanel(final String title) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame myFrame = new JFrame();
myFrame.setTitle(title);
您可以将匿名类转换为嵌套类。它允许您将参数传递到构造函数中
private static final MyRunnable implements Runnable {
private final String title;
public MyRunnable(String title) {
this.title = title;
}
@Override
public void run() {
// use title here
}
}
您可以将匿名类转换为嵌套类。它允许您将参数传递到构造函数中
private static final MyRunnable implements Runnable {
private final String title;
public MyRunnable(String title) {
this.title = title;
}
@Override
public void run() {
// use title here
}
}
代替myFrame.setTitleConference调用;代替myFrame.setTitleConference调用;