java - public classname() 永远不会在类 classname 中调用 - Java

标签 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) {

}

}

最佳答案

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

之后一段时间被调用

关于java - public classname() 永远不会在类 classname 中调用 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37180654/

相关文章:

java - JavaCC 中的 NULL 标记

Java Netbeans 8.0 Jframe GUI 程序 - arraylist 中的每个索引值未显示在 jtextArea 中的单独行上

java - 将可编辑文本框添加到 JFrame

java - JFrame 标题重绘

HTML 滚动声音 - 仅暂停

java - 自动生成 Ant build.xml

java - 如何在jsp页面中从数据库中检索数据

java - 我在 MNIST 数据集中读错了什么?

java - 媒体播放器不会在按钮单击方法中播放声音

node.js - Node 扬声器进程以退出代码 132 完成(被信号 4 : SIGILL) 中断