可能重复:
无法对非静态方法进行静态引用
Java 是我的第一堂编程课。我们学习了 OOP 的基础知识,但我从来没有在课堂上提出过这个问题。在我的下一个编程语言 C# 中,我们使用了 Visual Studio,但这个问题也从未出现过。你如何摆脱 main 方法来访问其他类?我回顾了我在课堂上编写的 java 程序,看起来所有方法都是静态的。在 c# 中,我制作了许多程序,而没有使用单一的静态方法。有人可以告诉我如何进行这项工作吗?我正在尝试用 Java 重写我用 C# 编写的程序,但我似乎无法弄清楚如何摆脱 main。这是带有 main 方法的第一个类:
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class DeluxKenoMainWindow extends JFrame
{
private Numbers gameNumbers;
public DeluxKenoMainWindow()
{
initUI();
}
public final void initUI()
{
setLayout(null);
int xCoord = 85;
int yCoord = 84;
Button[] button = new Button[80];
for(int i = 0; i<80; i++)
{
String buttonName = "button" + i;
if(i % 10 == 0)
{
xCoord = 12;
yCoord +=44;
}
if(i % 40 == 0)
yCoord += 10;
button[i] = new Button(buttonName, xCoord, yCoord, i+1);
xCoord += 42;
getContentPane().add(button[i]);
}
getContentPane().add(new Game(gameNumbers));
getContentPane().add(new AnimatedGraphics());
getContentPane().add(new BackgroundImage());
setTitle("Delux Keno");
setSize(600,600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
public void startGame()
{
do
{
Boolean[] pickedNumbers = gameNumbers.getNumbers();
}while (gameNumbers.numbersSet = false);
}
public static void main(String[] args)
{
startGame();
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
System.setProperty("DEBUG_UI", "true");
DeluxKenoMainWindow ex = new DeluxKenoMainWindow();
ex.setVisible(true);
}
});
}
}
这是我要访问的课程:
import java.util.Random;
public class Numbers<syncronized> {
private volatile Boolean[] computerNumbers = new Boolean[80];
private static final Object OBJ_LOCK = new Object();
public volatile Boolean numbersSet;
public void setNumbers()
{
synchronized(OBJ_LOCK)
{
int i = 0;
Random randy = new Random(System.currentTimeMillis());
do{
int testNum = randy.nextInt(80);
if(computerNumbers[testNum] = false)
{
computerNumbers[testNum] = true;
i++;
}
}while(i < 20);
numbersSet = true;
}
}
public Boolean[] getNumbers()
{
synchronized(OBJ_LOCK)
{
Boolean[] returnComputerNumbers = new Boolean[80];
for(int i = 0; i < computerNumbers.length; i++)
{
returnComputerNumbers[i] = computerNumbers[i];
computerNumbers[i] = false;
}
return returnComputerNumbers;
}
}
}
我确信有一个简单的解决方法,但我似乎找不到它。我确实在 stackoverflow 和谷歌上寻找答案,但这些对我来说都没有意义。谢谢你的帮助!!