2015-04-09 2 views
0

У меня возникает проблема с вызовом класса java из другого класса при нажатии кнопки.Java Как назвать другой класс?

Когда я нажимаю Воспроизвести другой кадр, экран выглядит белым, и я даже не могу его покинуть. кроме того, что отключить всю программу затмения. Новый кадр, который всплывает, - это всего лишь белый экран. Ничего другого из 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"); 
      } 

     } 
    } 

Это Main Java класс, который является уровень. он содержит характер и плод. персонаж может двигаться.

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

Быстрый вопрос, действительно ли вы спите всего за 5 мс? Возможно, 40-50 мс будет лучше (это все равно 25 Пл!)

Thread.sleep(5); //Control speed of player 
+0

40 является слишком медленным в этом случае использовать для нашей игры. – DontMatter

0

Общественные статической силы основных (String [] арг) специальный метод в Java. Это всегда первый метод, который вызывается при запуске программы. Кажется, вы вызываете это из своего клика по Play.

Фактически, факт, что у вас есть 2 общедоступных static void main (String [] args), делает вещи довольно запутанными. Какой из них будет вызван при запуске программы? Это определяется подсказкой java, которую можно вызвать из файла манифеста .jar (текстовый файл, который сообщает java о вещах о вашей программе).

Я лично пересмотрел дизайн программы, чтобы избежать использования 2 основных методов.

+0

Любые советы по устранению этой проблемы или вызов целого класса Java при нажатии кнопки? – DontMatter

+0

Немного эхх. Я работаю с кем-то, это для проекта. Я работал над меню. Код меню должен запускаться первым, когда он запускается из затмения. то когда пользователь нажимает кнопку воспроизведения, он должен каким-то образом вызвать основной класс java. Вероятно, его не следует называть Main, но w.e – DontMatter

+0

Возможно, сначала определим, что является вашим «самым важным» элементом. Полагаю, что это ваш JPanel. Затем добавьте меню в JPanel. Как описано здесь: http://stackoverflow.com/questions/4299846/add-jmenubar-to-a-jpanel – Math

0

void main() - это метод запуска вашего запуска. Программа может иметь только один основной метод.

Кнопка и т. Д., Чтобы начать игру, должна быть в основном методе, а методы других классов должны быть изменены на другое имя, например, на игру.

Вы можете вызывать методы класса с (синтаксис): object.method(), или для статических классов, class.method()

Смежные вопросы