Java如何调用另一个类?

时间:2015-04-09 15:53:38

标签: java class button call

当按下按钮时,我无法从另一个类调用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
        }
    }
}

3 个答案:

答案 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()