用Java听起来。失误

沉默

我试图在游戏中播放声音,例如,当我按下UP键时,听到雷射声,但出现错误,我不明白为什么。很可能我在方法中称代码错误,或者我弄错了源代码。

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: Could not initialize class SpaceInvadersPanel$SoundEffect
at SpaceInvadersPanel$4.keyPressed(SpaceInvadersPanel.java:69)
at java.awt.Component.processKeyEvent(Unknown Source)
at javax.swing.JComponent.processKeyEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

--

 import java.awt.event.*;
import javax.swing.*;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Color;
import javax.sound.sampled.*;
import java.io.*;
import java.net.URL;
import java.applet.*;
import java.awt.*;
import java.io.File;
import java.net.MalformedURLException;


public class SpaceInvadersPanel extends JPanel {
    private static final long serialVersionUID = 1L;
    private Timer timer;
    private Player1 player1;
    private Player1weapon player1weapon;
    private Player2 player2;
    private Player2weapon player2weapon;
    public Image background;
    public ImageIcon bg;
    int width, height;

    public SpaceInvadersPanel() {
        bg = new ImageIcon("src/resources/BG.png");
        background = bg.getImage();
        ActionListener action = new ActionListener() {  
            public void actionPerformed(ActionEvent evt) {
                if (player1 != null && player2 != null) {
                    player1.updateForNewFrame();
                    player1weapon.updateForNewFrame();
                    player2.updateForNewFrame();
                    player2weapon.updateForNewFrame();
                }
                repaint();
            }
        };//end Actionlistener()

        timer = new Timer( 10, action );

        addMouseListener( new MouseAdapter() {
            public void mousePressed(MouseEvent evt) {
                requestFocus();
            }
        } );

        addFocusListener( new FocusListener() {
            public void focusGained(FocusEvent evt) {
                timer.start();
                repaint();
            }
            public void focusLost(FocusEvent evt) {
                timer.stop();
                repaint();
            }
        } );

        addKeyListener( new KeyAdapter() {
            public void keyPressed(KeyEvent evt) {
                int code = evt.getKeyCode();

                if (code == KeyEvent.VK_LEFT) {
                    player1.centerX -= 10;
                }
                if (code == KeyEvent.VK_RIGHT) {
                    player1.centerX += 10;
                }
                if (code == KeyEvent.VK_UP) {
                    if (!player1weapon.isFalling)
                        player1weapon.isFalling = true;
                    SoundEffect.SHOOT.play();
                }

                if (code == KeyEvent.VK_A) {
                    player2.centerX -= 10;
                }
                if (code == KeyEvent.VK_D) {
                    player2.centerX += 10;
                }
                if (code == KeyEvent.VK_S) {
                    if (!player2weapon.isFalling)
                        player2weapon.isFalling = true;
                    SoundEffect.SHOOT.play();
                }
            }//end KeyPressed()
        } );//end KeyAdapter()
    }//end SpaceInvadersPanel


    public void paintComponent(Graphics g) {
        g.drawImage(background,0,0,700,700,null);
            if (player1 == null && player2 == null) {
            width = 700;
            height = 700;
            player1 = new Player1();
            player2 = new Player2();
            player1weapon = new Player1weapon();
            player2weapon = new Player2weapon();
        }

        if (hasFocus())
            g.setColor(Color.BLACK);
        else {
            g.setColor(Color.GREEN); 
            g.drawString("CLICK TO START THE GAME", 270, 350); 
            g.drawString("Player1", 550, 500); 
            g.drawString("Right arrow - Move Right", 550, 515); 
            g.drawString("Left arrow - Move Left", 550, 530);
            g.drawString("Up arrow - Fire", 550, 545);
            g.drawString("Player2", 50, 150); 
            g.drawString("D key - Move Right", 50, 165); 
            g.drawString("A key - Move Left", 50, 180);
            g.drawString("S key - Fire", 50, 195);
        }
        player1weapon.draw(g);
        player2weapon.draw(g);
        player1.draw(g);
        player2.draw(g);    

} // end paintComponent()

    public enum SoundEffect {
           SHOOT("sounds/Laser.wav");       // bullet

           // Nested class for specifying volume
           public static enum Volume {
              MUTE, LOW, MEDIUM, HIGH
           }

           public static Volume volume = Volume.LOW;

           // Each sound effect has its own clip, loaded with its own sound file.
           private Clip clip;

           // Constructor to construct each element of the enum with its own sound file.
           SoundEffect(String soundFileName) {
              try {
                 // Use URL (instead of File) to read from disk and JAR.
                 URL url = this.getClass().getClassLoader().getResource(soundFileName);
                 // Set up an audio input stream piped from the sound file.
                 AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(url);
                 // Get a clip resource.
                 clip = AudioSystem.getClip();
                 // Open audio clip and load samples from the audio input stream.
                 clip.open(audioInputStream);
              } catch (UnsupportedAudioFileException e) {
                 e.printStackTrace();
              } catch (IOException e) {
                 e.printStackTrace();
              } catch (LineUnavailableException e) {
                 e.printStackTrace();
              }
           }

           // Play or Re-play the sound effect from the beginning, by rewinding.
           public void play() {
              if (volume != Volume.MUTE) {
                 if (clip.isRunning())
                    clip.stop();   // Stop the player if it is still running
                 clip.setFramePosition(0); // rewind to the beginning
                 clip.start();     // Start playing
              }
           }

           // Optional static method to pre-load all the sound files.
           static void init() {
              values(); // calls the constructor for all the elements
           }
        }


    public class Player1{
        int centerX, centerY;
        int width, height;
        int explosionFrameNumber;
        int score = 0;
        boolean isExploding;
        public Image p1;
        public ImageIcon p1stock;
        public Image explodep1;
        public ImageIcon explodep1icon;

        Player1() {
            centerX = 500;
            centerY = 600;
            isExploding = false;
        }

        void updateForNewFrame() {
            if (isExploding) {
                    explosionFrameNumber++;
                    if (explosionFrameNumber == 15) {
                        width = 700;
                        centerX = (int)(width*Math.random());
                        centerY = 600;
                        isExploding = false;
                    }
                }
            if(centerX <= -30)
                centerX = -10;
            else if(centerX > 640)
                centerX = 630;
        }//end updateForNewFrame

        void draw(Graphics g) {
            p1stock = new ImageIcon("src/resources/player1.png");
            p1 = p1stock.getImage();
            explodep1icon = new ImageIcon("src/resources/explosion.png");
            explodep1 = explodep1icon.getImage();  
            g.setColor(Color.RED);
            g.drawString("Score: " + score, 20, 450);
            g.drawImage(p1, centerX, centerY, p1.getWidth(null), p1.getHeight(null),null);
            if (isExploding) {
                g.drawImage(explodep1, centerX - 4*explosionFrameNumber + 40, centerY - 2*explosionFrameNumber + 10, 
                            8*explosionFrameNumber, 4*explosionFrameNumber,null);
            }
        }//end draw()

    }//end Player1


    public class Player2{
        int centerX, centerY;
        int width, height;
        boolean isExploding;
        int explosionFrameNumber;
        int score = 0;
        public Image p2;
        public Image explodep2;
        public ImageIcon p2stock;
        public ImageIcon explodep2icon;

        Player2() {
            centerX = 50;
            centerY = 30;
            isExploding = false;
        }

        void updateForNewFrame() {
            if (isExploding) {
                explosionFrameNumber++;
                if (explosionFrameNumber == 15) {
                    isExploding = false;
                    width = 700;
                    centerX = (int)(width*Math.random());
                    centerY = 30;
                }
            }
            if(centerX <= -30)
                centerX = -10;
            else if(centerX > 640)
                centerX = 630;
        }//end updateForNewFrame()

        void draw(Graphics g) {
            p2stock = new ImageIcon("src/resources/player2.png");
            p2 = p2stock.getImage();
            explodep2icon = new ImageIcon("src/resources/explosion.png");
            explodep2 = explodep2icon.getImage();
            g.setColor(Color.RED);
            g.drawString("Score: " + (score), 20, 250);
            g.drawImage(p2, centerX, centerY, p2.getWidth(null), p2.getHeight(null),null);
            if (isExploding) {
                g.drawImage(explodep2, centerX - 4*explosionFrameNumber + 40, centerY - 2*explosionFrameNumber + 10, 
                            8*explosionFrameNumber, 4*explosionFrameNumber,null);
            }
        }//end draw()

    } //end Player2


    public class Player1weapon{
        int centerX, centerY;
        boolean isFalling;
        public Image laserp1;
        public ImageIcon lp1icon;


        public Player1weapon() {
            isFalling = false;
        }

        void updateForNewFrame() {
            if (isFalling) {
                if (centerY < player2.centerY - 50) {
                    isFalling = false;
                }
                else 
                    if (Math.abs(centerX - player2.centerX - 40) <= 30 && Math.abs(centerY - player2.centerY + 35) <= 70) {
                        player2.isExploding = true;
                        player2.explosionFrameNumber = 1;
                        isFalling = false;
                        player1.score+=10;
                    }
                    else
                        centerY -= 20;
            }//end if  
        }//end updateForNewFrame()

        void draw(Graphics g) {
            lp1icon = new ImageIcon("src/resources/laserplayer1.png");
            laserp1 = lp1icon.getImage();
            if (!isFalling) {
                centerX = player1.centerX + 37;
                centerY = player1.centerY + 23;
            }
            g.drawImage(laserp1, centerX, centerY - 8, laserp1.getWidth(null), laserp1.getHeight(null),null);
        }//end Draw()

    }//end player1weapon


    public class Player2weapon{
            int centerX, centerY;
            boolean isFalling;
            public Image laserp2;
            public ImageIcon lp2icon;

            public Player2weapon() {
                isFalling = false;
            }

            void updateForNewFrame() {
                if (isFalling) {
                    if (centerY > player1.centerY + 50) {
                        isFalling = false;
                    }
                    else 
                        if (Math.abs(centerX - player1.centerX) <= 20 && Math.abs(centerY - player1.centerY + 20) <= 20) {
                            player1.isExploding = true;
                            player1.explosionFrameNumber = 1;
                            isFalling = false;
                            player2.score+=10;
                        }
                        else
                            centerY += 20;
                }//end if   
            }//end updateForNewFrame()

            void draw(Graphics g) {
                lp2icon = new ImageIcon("src/resources/laserplayer2.png");
                laserp2 = lp2icon.getImage();
                if (!isFalling) {
                    centerX = player2.centerX + 1;
                    centerY = player2.centerY + 15;
                }
                if (isFalling) {
                    g.drawImage(laserp2, centerX + 36, centerY - 8, laserp2.getWidth(null), laserp2.getHeight(null),null);
                }
            }//end Draw()

        }//end player2weapon


    /*public class Asteroid{
        int centerX, centerY;
        boolean isFalling;
        public Image asteroid;
        public ImageIcon icon;

        public Asteroid() {
            isFalling = false;
            icon = new ImageIcon("src/resources/laserplayer2.png");
            asteroid = icon.getImage();
        }

        void updateForNewFrame() {
            if (isFalling) {
                if (centerY > player1.centerY + 50) {
                    isFalling = false;
                }
                else 
                    if (Math.abs(centerX - player1.centerX) <= 20 && Math.abs(centerY - player1.centerY + 20) <= 20) {
                        player1.isExploding = true;
                        player1.explosionFrameNumber = 1;
                        isFalling = false;
                        player2.score+=10;
                    }
                    else
                        centerY += 50;
            }//end if   
        }//end updateForNewFrame()

        void draw(Graphics g) {
            if (!isFalling) {
                centerX = player2.centerX + 1;
                centerY = player2.centerY + 15;
                g.drawImage(asteroid, centerX + 36, centerY - 8, asteroid.getWidth(null), asteroid.getHeight(null),null);
            }
            if (isFalling) {
                g.drawImage(asteroid, centerX + 36, centerY - 8, asteroid.getWidth(null), asteroid.getHeight(null),null);
            }
        }//end Draw()

    }//end asteroid*/

}//end SpaceInvadersPanel
高拉夫·瓦玛(Gaurav Varma)

当程序在运行时尝试访问该类时,stacktrace指出该类未初始化。在这种情况下,ExceptionInInitializerError堆栈跟踪中也应该有一个如果是,则可以在SoundEffect构造函数中放置一个Exception或Throwable块,以查看到底出了什么问题:

catch (Exception e) {
  e.printStackTrace();
}

如有其他疑问,可以进行以下操作-调试NoClassDefFoundError

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使系统听起来比设备响亮

Laravel听起来像魔术

Java OpenAL:按键时听起来会播放,但仅持续很短的时间

解析听起来有效的 DateTime 时出错

听起来自然的文字到语音?

检查一个字符串在Java中听起来像另一个字符串多少

AWS Dynamodb的项目大小和列表项目计数限制听起来很矛盾

创建工厂的阶级的好名字是什么?(FooFactoryFactory听起来很傻imo)

听起来不行吗?(仍然需要一个答案)

电源听起来像是对硬盘进行了碎片整理

胖模型和瘦控制器听起来像是在创造上帝模型

听起来不起作用-特定版本的内核中的错误?

如何使电影2001:太空漫游中的Ubuntu听起来像HAL?

添加效果使声音听起来像电话一样

新硬盘听起来不太好,有助于解释SMART

如何在Linux和Windows中使MIDI文件听起来相同?

pygame`.mid`音频文件在其他平台上听起来不同

为什么昂贵的耳机在Linux上听起来便宜-驱动程序糟透了?

VBA代码来隐藏表中的行(比听起来复杂)

致命异常:(听起来很糟糕)无法启动活动ComponentInfo

笔记本电脑的扬声器听起来很糟糕。音质不佳

这听起来可能很愚蠢,但是我将如何开始绘制这个图形呢?

直接在子类的对象上调用时的静态和私有方法行为听起来像是覆盖?

惰性初始化听起来很不错。为什么不总是默认使用延迟初始化?

无线耳塞 (Oppo enco X) 听起来很糟糕,仅在我的主要 Windows 10 机器上失真

使用 shell 脚本读取、比较和保存 2 个文件(比听起来的多一点)

由于 Integer.MAX_VALUE+1==Integer.MIN_VALUE+1,这个循环将运行多久(听起来像一个愚蠢的问题,但事实并非如此)?

笔记本电脑上的alc282听起来明显优于atx主板上的alc1220。我怎样才能解决这个问题?

为什么用Golang编写的某些函数运行起来比用Java还要慢?