-1

当我想尝试不是通过方法而是通过类来完成我的工作时,我只是在玩 Java。看看我做了什么。

import javax.swing.*;

class foolingAround{
    public static void main(String ARG[]) {
        createMyInterface();
    }

    private static void createMyInterface(){
        JFrame f = new JFrame("Frame from Swing but not from other class");
        f.setSize(100,100);
        f.setVisible(true);
        new createAnotherInterface();
    }

}

class createAnotherInterface{
    public static void main(String arg[]){
        giveMe();
    }

    static JFrame giveMe(){
        JFrame p = new JFrame("Frame from Swing and from another class");
        p.setSize(100,100);
        p.setVisible(true);
        return p;
    }
}

它编译时没有显示任何错误,但class createAnotherInterface没有显示框架。为什么?我什么时候做不同的类而不是方法?

4

7 回答 7

1

实例化第二个类不会调用它的“main”方法——你必须giveMe()从第一个类显式调用该方法:

private static void createMyInterface(){
        JFrame f = new JFrame("Frame from Swing but not from other class");
        f.setSize(100,100);
        f.setVisible(true);
        new createAnotherInterface().giveMe();
    }

“主”函数称为“入口点”,它是 JVM 在“启动”Java 应用程序时跳转到的函数。由于在不同的类中可以有多个 main,这就是为什么在从命令行启动时必须指定“哪个类”

于 2012-11-12T21:32:54.363 回答
1

new createAnotherInterface();您一起创建一个新对象,而不是启动giveMe()or main

有多种方法可以“愚弄”来解决您的问题,可能最简单的方法是更改​​:

new createAnotherInterface();

进入

createAnotherInterface.giveMe();

另外,请注意这createAnotherInterface不是一个接口,一旦“foolingAround”阶段完成,您应该遵循Java 编程语言的代码约定。

于 2012-11-12T21:33:33.303 回答
1

你的 createAnotherInterface 类不应该有一个 main 方法,如果有,它就不会被调用。它应该有一个构造函数,或者您应该使用对该类实例的引用来调用 giveMe() 方法。

于 2012-11-12T21:34:21.380 回答
1
 new createAnotherInterface();

只会调用createAnotherInterface的默认构造函数。

您必须从您的班级giveMe()明确调用。foolingAround

private static void createMyInterface(){
    JFrame f = new JFrame("Frame from Swing but not from other class");
    f.setSize(100,100);
    f.setVisible(true);
    createAnotherInterface.giveMe();
}

或为您的 CreateAnotherInterface 编写构造函数。

    class createAnotherInterface{
    public createAnotherInterface(){
    giveMe();
    }
    public class FoolingAround {
    private static void createMyInterface(){
        JFrame f = new JFrame("Frame from Swing but not from other class");
        f.setSize(100,100);
        f.setVisible(true);
        new createAnotherInterface();
    }
}
于 2012-11-12T21:34:27.863 回答
0

事实上,我已经复制了您的代码并进行了测试。文件名为createAnotherInterface.java.

它有效并且JFrame出来了。

于 2012-11-12T21:41:02.640 回答
0

您已命名该方法giveMe,考虑重构为构造函数createAnotherInterface或仅创建一个启动该方法的构造函数。

于 2012-11-12T21:42:26.660 回答
0

您只是为 createAnotherInterface 类创建一个新对象,默认情况下它调用其默认构造函数,并且在该默认构造函数中没有调用 giveMe() 方法。

我不确定我是对还是错,但我要求您在“createAnotherInterface”类中创建一个构造函数,并在该构造函数中调用“giveMe()”方法。我希望这能解决你的问题。

或至少打电话

new createAnotherInterface().giveMe();

在您的 createMyInterface() 类中

于 2012-11-12T21:54:35.107 回答