2016-05-12 80 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構造函數。 我想你想在主循環之前的主要方法中這樣做。

相關問題