当我想要尝试让我的工作不是从一个方法而是从一个类来完成时,我只是在玩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
的框架未显示。为什么?我何时制作不同的课而不是方法?
答案 0 :(得分: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();
}
“main”函数称为“入口点”,它是JVM在“启动”java应用程序时跳转到的函数。由于在不同的类中可以有多个main,因此在从命令行启动时必须指定“which class”
答案 1 :(得分:1)
使用new createAnotherInterface();
,您只能创建一个新对象,而不是启动giveMe()
或main
。
有多种方法可以“愚弄”来解决您的问题,可能最容易改变:
new createAnotherInterface();
到
createAnotherInterface.giveMe();
另请注意,createAnotherInterface
不是界面,一旦完成“foolingAround”阶段,您应该关注Code Conventions for the Java Programming Language。
答案 2 :(得分:1)
你的createAnotherInterface类不应该有一个main方法,如果有的话,它不会被调用。它应该有一个构造函数,或者你应该使用你对该类实例的引用来调用giveMe()方法。
答案 3 :(得分: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();
}
}
答案 4 :(得分:0)
事实上,我已经复制了你的代码并进行了测试。文件名为createAnotherInterface.java
。
它有效,JFrame
出来。
答案 5 :(得分:0)
您已将方法命名为giveMe
,请考虑重构为构造函数createAnotherInterface
,或者只创建一个启动该方法的构造函数。
答案 6 :(得分:0)
您只是为createAnotherInterface类创建一个新Object,默认情况下它调用默认构造函数,并且在默认构造函数中没有调用giveMe()方法。
我不确定我是对还是错,但我要求你在“createAnotherInterface”类中创建一个构造函数,并在constuctor中调用“giveMe()”方法。我希望这能解决你的问题。
或至少打电话
new createAnotherInterface().giveMe();
在你的createMyInterface()类
中