Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 匿名类实现接口,不能有参数_Java - Fatal编程技术网

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调用;