从不在类classname中调用public classname() - Java

时间:2016-05-12 07:54:36

标签: java audio jframe mouselistener

以下方法

public 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) {

}

}

3 个答案:

答案 0 :(得分:1)

  

此代码永远不会调用JSound?有什么原因吗?

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

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

答案 1 :(得分: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,其次,在mainLooprunning之前,任何名为AFTER false的内容都不会执行,所以我只能假设在您致电JSound

后的某个时间调用mainLoop

答案 2 :(得分:0)

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