2016-05-12 28 views
0

下面的方法公共类名()不会被调用的className类 - 的Java

公共JSound(){

}

不会被调用的代码? 任何原因为什么?

如果我不能以这种方式工作,是否有第二种方式我可以使用鼠标监听器?它需要一个非静态方法,所以我不知道如何实现这一点。

我做了另外的

new JSound(); 

JSound JS = new JSound(); 

但既不工作?

package Sound; 

import java.awt.Component; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 

import javax.swing.JFrame; 

public class JSound extends JFrame implements MouseListener { 

//IDK what its for but its important for jframe 
private static final long serialVersionUID = 3314065768834871224L; 

//Gets General volume 
public static double volume = Audio.getMasterOutputVolume()*3*100; 

//Universal variables are static, and i usually put them here 
public static boolean running = true; 
public static String title = "Advanced Java Sound"; 
public static int width = 410; 
public static int height = 600; 

public static int ticks = 1; 

//class setups 
public JSound sound; 

public JSound() { 
    //This never gets called for some reason 

    //initialises mouse input 
    System.out.println("apples"); 
    setTitle("Simple Frame"); 
    addMouseListener(this); 
} 

public static void main(String args[]) { 
    //Creates the display basicly just the empty window you will see all the stuff drawn to 
    Display.Window(); 
    //Calls the main loop method 
    mainloop(); 
    //SoundLoad(); 
    //addMouseListener(sound); 
} 

public static void mainloop() { 
    render.quickrender(); 

    try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } 

    while(running) { 
     long lastTime = System.nanoTime(); 
     double amountOfTicks = 60.0; 
     double ns = 1000000000/amountOfTicks; 
     double delta = 0; 
     long timer = System.currentTimeMillis(); 
     int frames = 0; 
     while (running) { 
      long now = System.nanoTime(); 
      delta += (now - lastTime)/ns; 
      lastTime = now; 
      while (delta >= 1) { 
       ticks++; 
       delta--; 
      } 
      if (running) 
       tick(); 
       render.renderer(); 
      frames++; 

      if(System.currentTimeMillis() - timer > 1000) { 
       timer += 1000; 
       System.out.println("FPS: " + frames + " Ticks: " + ticks); 
       frames = 0; 
      } 
     } 
    } 
} 

public static void tick() { 
    //Put any tick method stuff here, it will be executed in priority to render, and will occur more then 60 times per second 

    //Audio.setMasterOutputVolume(0.5f); 
    volume = Audio.getMasterOutputVolume()*4.8*100; 
    //System.out.println(Audio.getMasterOutputVolume()); 
    //System.out.println((int)volume); 
} 

public void mouseClicked(MouseEvent e) { 
    System.out.println(e.getX()); 
    System.out.println(e.getY()); 
} 

public void mouseEntered(MouseEvent e) { 

} 

public void mouseExited(MouseEvent e) { 

} 

@Override 
public void mousePressed(MouseEvent e) { 
    System.out.println(e.getX()); 
    System.out.println(e.getY()); 
} 

public void mouseReleased(MouseEvent e) { 

} 

}

+1

这就是构造函数。你必须在别处给他打电话。 – Seth

+0

'mainLoop'后面的任何东西都不会被执行(直到运行为false) – MadProgrammer

回答

1
import javax.swing.JFrame; 

class JSound extends JFrame { 
    //Universal variables are static, and i usually put them here 
    public static boolean running = true; 
    public static String title = "Advanced Java Sound"; 
    public static int width = 410; 
    public static int height = 600; 

    public static int ticks = 1; 

    //class setups 
    public JSound sound; 

    public JSound() { 
     //This never gets called for some reason 

     //initialises mouse input 
     System.out.println("apples"); 
     setTitle("Simple Frame"); 
    } 

    public static void main(String args[]) { 
     System.out.println("I'm before main loop"); 
     new JSound(); 
     mainloop(); 
     System.out.println("I'm after main loop"); 
     new JSound(); 
    } 

    public static void mainloop() { 

     try { 
      Thread.sleep(10); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     while (running) { 
      long lastTime = System.nanoTime(); 
      double amountOfTicks = 60.0; 
      double ns = 1000000000/amountOfTicks; 
      double delta = 0; 
      long timer = System.currentTimeMillis(); 
      int frames = 0; 
      while (running) { 
       long now = System.nanoTime(); 
       delta += (now - lastTime)/ns; 
       lastTime = now; 
       while (delta >= 1) { 
        ticks++; 
        delta--; 
       } 
       if (running) { 
        tick(); 
       } 
       frames++; 

       if (System.currentTimeMillis() - timer > 1000) { 
        timer += 1000; 
        System.out.println("FPS: " + frames + " Ticks: " + ticks); 
        frames = 0; 
       } 
      } 
     } 
    } 

    public static void tick() { 

    } 
} 

首先,以前的代码永远不会调用JSound,第二重要的是,什么叫后mainLoop永远不会执行,直到runningfalse,所以我只能假设,JSound获取调用一定的时间你打电话mainLoop

+0

这一个工程,谢谢 – CGameing

+0

@CGameing - 但你知道为什么吗? –

+0

是的,我把它放在我的主循环之后 – CGameing

1

JSound不会被调用的代码?任何原因为什么?

首先,它不是一种方法。它是一个构造函数

它永远不会被调用的原因是代码中没有任何地方有表达式new JSound()。为什么?我不知道。询问编写代码的人!

+0

我把新的JSound();在我的主要方法? 仍然无法正常工作? – CGameing

0

它永远不会被调用,因为你永远不会调用JSound构造函数。 我想你想在主循环之前的主要方法中这样做。