Napisałem programik konsolowy odtwarzający pliki dźwiękowe

        JFileChooser fc = new JFileChooser(".");                 
        FileNameExtensionFilter filter = new FileNameExtensionFilter("WAV & MID", "wav", "mid","wave","midi");
        fc.setFileFilter(filter);        
        if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
        {
            File file = fc.getSelectedFile();
        }

        try
        {
            clip = AudioSystem.getClip();
            AudioInputStream inStream = AudioSystem.getAudioInputStream(file);
            clip.open(inStream);
            clip.start();
        }
        catch(Exception e)
        {
            System.out.println(e);
            System.exit(0);
        }
        Timer timer = new Timer(0,new ActionListener()
        {
            public void actionPerformed(ActionEvent ae)
            {
                if(!clip.isRunning())
                {
                    System.exit(0);
                }
            }
        });
        timer.setDelay(100);  
        timer.start();

(Timer jest konieczny by podtrzymać działanie programu.)
Potem go trochę zmodyfikowałem - nazwę pliku można podać jako argument programu


        File file = null;
        if(args.length > 0)
        {
            file = new File(args[0]);
        }
        else
        {
            JFileChooser fc = new JFileChooser(".");             
            FileNameExtensionFilter filter = new FileNameExtensionFilter("WAV & MID", "wav", "mid","wave","midi");
            fc.setFileFilter(filter);        
            if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
            {
                file = fc.getSelectedFile();
            }
        }
        try
        {
            ...//reszta bez zmian

Niestety pliki podawane jako argument wywołania nie były odtwarzane. Pomogło przeniesienie instrukcji

        File file = null;
        JFileChooser fc = new JFileChooser(".");
        if(args.length > 0)
        {
            file = new File(args[0]);
        }
        else
        {                         
            FileNameExtensionFilter filter = new FileNameExtensionFilter("WAV & MID", "wav", "mid","wave","midi");
            fc.setFileFilter(filter);        
            if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
            {
                file = fc.getSelectedFile();
            }
        }

Czekam na przekonujące wyjaśnienie takiego zachowania.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell