Java exe不会显示特定的jframe,但IDE会显示

时间:2019-07-11 14:50:24

标签: java audio netbeans exe

我用Java创建了一个迷你测验游戏,希望将其转换为exe。它带有照片和声音,但它们位于各自的文件夹中并且具有正确的路径。当我单击“插入新问题”时,exe正常运行,“退出”选项也会发生相同的情况。但是,当我单击“播放”时,没有任何窗口弹出,但是我也没有收到错误消息。

我尝试将照片和声音与使用它们的班级放在同一文件夹中,但不能解决问题。我也尝试在URL路径的开头插入“ ..”,但也没有解决。我已经附上了未显示框架的代码。

ArrayList<Question> questions;
    int selectedQuestion = 0;
    int remainingLife = 3;
    Random random = new Random();
    int fillAnswer = 0;    
    String [] answerArray = new String[4];

Clip clipSuccess;
Clip clipFailure;
Clip clipGameOver;

public static Mixer mixer;
public static Clip clip;

javax.swing.Timer timer = new javax.swing.Timer(1000, new java.awt.event.ActionListener() {
    @Override
    public void actionPerformed(ActionEvent arg0) {                      

         timer.stop();
         jLabel5.setIcon(null);
         playRound();

    }
});


public PlayGame() {
    initComponents();
    questions = new ArrayList<Question>();
    populateArrayList();
    clipSuccess = setSound("../Sounds/success.wav");
    clipFailure = setSound("../Sounds/failure.wav");
    clipGameOver = setSound("../Sounds/gameOver.wav");
    playRound(); 

   }

public void populateArrayList(){

    try{
       FileInputStream file = new FileInputStream("Questions.dat"); 
       ObjectInputStream inputFile = new ObjectInputStream(file);

       boolean endOfFile = false;

       while(!endOfFile){

           try{

               questions.add((Question) inputFile.readObject());                   
           }
           catch(EOFException e){
               endOfFile = true;
           }
           catch(Exception f){
               JOptionPane.showMessageDialog(null, f.getMessage());
           }
       }
       inputFile.close();

    }
    catch(IOException e){

        JOptionPane.showMessageDialog(null, e.getMessage());
    }
}

public Clip setSound(String soundPath){
    Mixer.Info[] mixInfos = AudioSystem.getMixerInfo();
    /*for(Mixer.Info info: mixInfos){
        System.out.println(info.getName() + "----" + info.getDescription());
    }*/
    mixer = AudioSystem.getMixer(mixInfos[3]);

    DataLine.Info dataInfo = new DataLine.Info(Clip.class, null);
    try {
        clip = (Clip)mixer.getLine(dataInfo);
                }
    catch(LineUnavailableException lue){
        lue.printStackTrace();            
    }

    try{
        URL soundURL = PlayGame.class.getResource(soundPath);
        AudioInputStream audioStream = AudioSystem.getAudioInputStream(soundURL);
        clip.open(audioStream);
    }
    catch(LineUnavailableException lue){
        lue.printStackTrace();
    }
    catch(UnsupportedAudioFileException uofe){
        uofe.printStackTrace();
    }
    catch(IOException ioe){
        ioe.printStackTrace();
    }
    return clip;
}



public void successAnswer(){
    JOptionPane.showMessageDialog(null, "Απάντησες σωστά!");
    jLabel5.setText("");
    jLabel5.setIcon(new ImageIcon(PlayGame.class.getResource("../Images/Fireworks-animated.gif")));
    clipSuccess.setFramePosition(0);
    clipSuccess.start();        
    timer.start();
}

 public void wrongAnswer(){ 

    remainingLife--;
    JOptionPane.showMessageDialog(null, "Απάντησες λάθος..");
    jLabel5.setText("");
    jLabel5.setIcon(new ImageIcon (PlayGame.class.getResource("../Images/failure.gif")));
    if (remainingLife == 0){
        clipFailure.setFramePosition(0);
        clipFailure.start();
        timer.start();
        JOptionPane.showMessageDialog(null, "Δυστυχώς έχασες..");
        clipGameOver.setFramePosition(0);
        clipGameOver.start();  
        do{
            try{
                Thread.sleep(50);
            }
            catch(InterruptedException ie){
                ie.printStackTrace();
            }  
        }while(clipGameOver.isActive());
        System.exit(0);
    }      
    clipFailure.setFramePosition(0);
    clipFailure.start();
    timer.start();
}

public void playRound(){
    selectedQuestion = random.nextInt(questions.size());

    jTextField3.setText(Integer.toString(remainingLife));
    jTextArea2.setText(questions.get(selectedQuestion).getQuestionName());


    for (int i=0; i<4; i++){

        fillAnswer = random.nextInt(questions.size());
        answerArray[i] = questions.get(fillAnswer).getQuestionAnswer();
        if (i==2){
            answerArray[i] = questions.get(selectedQuestion).getQuestionAnswer();
            continue;
        }        
     }
    Collections.shuffle(Arrays.asList(answerArray));

    jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(answerArray));
}      

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
    int selectedAnswer = jComboBox1.getSelectedIndex();


    jLabel5.setIcon(null);
    if (questions.get(selectedQuestion).getQuestionAnswer().trim().equals(answerArray[selectedAnswer].trim())){
        successAnswer();            
    } 
    else{
        wrongAnswer();
    }    

    timer.start();


}                                        

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    System.exit(0);

在IDE中,输出是一个带问题的jframe,一个包含4个答案的组合框,玩家的生命点和两个按钮(一个用于锁定答案,一个用于退出程序)。但是以exe形式,它甚至都不会弹出。


编辑-这是包装程序显示的错误:

线程“ AWT-EventQueue-0”中的异常java.lang.NoClassDefFoundError:org / netbeans / lib / awtextra / AbsoluteLayout     在quiz.PlayGame.initComponents(PlayGame.java:277)     在quiz.PlayGame。(PlayGame.java:62)

0 个答案:

没有答案