当按下按钮时,我无法从另一个类调用java类。
当我按下Play时,另一帧显示屏幕为白色,我甚至无法退出。关闭整个日食程序。流行起来的新框架只是一个白色的屏幕,没有其他来自Main Class的内容就像角色一样。
这是我的菜单类代码,其中包含用户将按下的按钮。
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Menu implements ActionListener {
JButton Play, Scoreboard;
public static void main(String[] args) throws InterruptedException
{
Menu myWindow = new Menu();
}
public Menu() {
JFrame frame = new JFrame("Fruit Catcher");
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
// Filler panel to fill in the empty space to get button panel centered.
JPanel filler = new JPanel();
filler.setPreferredSize(new Dimension(180,180));
ImageIcon junglebackground = new ImageIcon("junglebackground.jpg");
JLabel backgroundimage = new JLabel(junglebackground);
frame.add(backgroundimage);
frame.setSize(700,470);
frame.setResizable(false);
frame.setVisible(true);
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout((LayoutManager) new BoxLayout(buttonPanel, BoxLayout.Y_AXIS));
Play = new JButton("Play");
Scoreboard = new JButton("Scoreboard");
Play.setAlignmentX(Component.CENTER_ALIGNMENT);
Scoreboard.setAlignmentX(Component.CENTER_ALIGNMENT);
JLabel gap = new JLabel("\n");
Play.addActionListener(this);
Scoreboard.addActionListener(this);
buttonPanel.add(Play);
buttonPanel.add(gap);
buttonPanel.add(Scoreboard);
panel.add(buttonPanel, BorderLayout.CENTER);
panel.add(filler, BorderLayout.NORTH);
frame.add(panel);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(Play))
{
String[] args = {};
try {
Main.main(args);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
}
if(e.getSource().equals(Scoreboard))
{
System.out.println("test");
}
}
}
这是主要的java类,它是Level。它包含特色和水果。角色可以移动。
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.*;
import javax.swing.*;
public class Main extends JPanel
{
Character player = new Character(this);
movement fruit = new movement(this);
public Main()
{
addKeyListener(new KeyListener() //KeyListener for the main
{
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
player.keyReleased(e);
}
public void keyPressed(KeyEvent e)
{
player.keyPressed(e);
}
});
setFocusable(true); //Allows the focus to be on the main and enables movement
}
private void move()
{
player.move();
}
public void paint(Graphics g)
{
super.paint(g);
Graphics2D Player = (Graphics2D) g;
player.paint(Player);
Graphics2D Fruit = (Graphics2D) g;
fruit.paintComponent(Fruit);
}
public static void main(String[] args) throws InterruptedException
{
JFrame frame = new JFrame("Fruit Catcher");
Main game = new Main();
frame.add(game);
frame.setSize(700, 450);
frame.setVisible(true);
while (true)
{
game.move();
game.repaint();
Thread.sleep(5); //Control speed of player
}
}
}
答案 0 :(得分:0)
快速提问,你真的睡了5毫秒吗?也许40-50毫秒会更好(无论如何25 pfs!)
Thread.sleep(5); //Control speed of player
答案 1 :(得分:0)
public static void main(String [] args)是Java中的一种特殊方法。这始终是程序启动时调用的第一个方法。您似乎是通过单击“播放”来调用它。
实际上,你有2个公共static void main(String [] args)的事实让事情变得非常混乱。程序启动时会调用哪一个?这是由告诉java从.jar清单文件调用哪一个(一个文本文件告诉java有关你的程序的不同内容)。
我个人会重新审视程序的设计,以避免使用两种主要方法。
答案 2 :(得分:0)
void main()是执行开始的方法。程序只能有一个主要方法。
开始游戏的按钮等应该在main方法中,其他类的方法应该改为不同的名称,例如游戏。
您可以使用(语法):object.method()或静态类调用类方法,class.method()