JavaFX 2.1 and threads? -Using a JavaFX application?

I need a really easy way to play an mp3 file from a Java application. After some research, I found that the latest versions of Java 7 SE are packaged in JavaFX, so I decided to give it a try. This question is NOT about playing mp3 files, but about how to get JavaFX to work well.

So, in my first experiment with JavaFX, I used some code suggested in post to stackoverflow ( see here ) and created essentially the following test program:

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

public class progtest extends Application
{

    /*---------------------------------------------------------*\
        FUNCTION:  main()
    \*---------------------------------------------------------*/
    public static void main(String args[])
    {

        launch(args);

    } /* END:  main() */

    /*---------------------------------------------------------*\
        FUNCTION:  start()
    \*---------------------------------------------------------*/
    @Override
    public void start(Stage stage)
    {

        Media medMsg 
            = 
            new Media(getClass().getResource("msg.mp3").toExternalForm());
        MediaPlayer medplMsg = new MediaPlayer(medMsg);
        medplMsg.play();

        System.out.println("Here.\n");

    } /* END:  start() */

}

(This is a little more complicated than my original test program: this version appeared after the offers from jewelsea made in response to an earlier question that I posted about how to run the program in general ( see here ).)

, :

javac -cp "c:\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar";..\bin -d ..\bin ..\src\progtest.java

, , .. \bin :

java -cp .;"c:\Program Files\Oracle\JavaFX 2.1 Runtime\lib\jfxrt.jar" progtest

. , , Ctrl-C.

- . , Java (, , , ).

, , , , , , . ( , , , .) , :

:

import javafx.application.Application;
import javafx.stage.Stage;
import Msg.*;

public class progtest2 extends Application
{

    /*---------------------------------------------------------*\
        FUNCTION:  main()
    \*---------------------------------------------------------*/
    public static void main(String args[])
    {

        launch(args);

    } /* END:  main() */

    /*---------------------------------------------------------*\
        FUNCTION:  start()
    \*---------------------------------------------------------*/
    @Override
    public void start(Stage stage)
    {

        Msg msgTime = new Msg();
        msgTime.passClass(getClass());
        msgTime.start();

        try
        {
            msgTime.join();
        }
        catch (InterruptedException e)
        {
        }

        System.out.println("Here.\n");

    } /* END:  start() */

}

Msg, mp3 :

package Msg;

import KeyIO.*;
import javafx.application.Application;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

public class Msg extends Thread
{

    private Class classRt = null;

    /*--------------------------------------------------------*\
        FUNCTION:  passClass()
    \*--------------------------------------------------------*/
    public void passClass(Class rt)
    {

        classRt = rt;

    } /* END:  passClass() */

    /*--------------------------------------------------------*\
        FUNCTION:  run()
    \*--------------------------------------------------------*/
    public void run()
    {

        Media medMsg
            = new Media(classRt.getResource("msg.mp3").toExternalForm());
        MediaPlayer medplMsg = new MediaPlayer(medMsg);
        medplMsg.play();

        System.out.println("Leaving Msg thread.\n");

    } /* END:  run() */

}

( (mutatis mutandis re ), .)

mp3 . , " Msg thread". "", , , Msg . , , . Ctrl-C, .

System.exit() , , . , . , System.exit() , .

, System.out.println( ".\n" ); System.exit(), :

System.out.print("Press ENTER to end...");
KeyIO.ReadLine();

(KeyIO - , . .)

, , .

. . ENTER, .

, - , System.exit(). , .

Urgh!

, , , ? , , , .

!

+5
2

progtest , implicitExit . , , , .

mp3, mediaPlayer.setOnEndOfMedia(runnable), Platform.exit().

medplMsg.setOnEndOfMedia(new Runnable() {
  @Override public void run() {
    Platform.exit();
  }
});

( ...). , ( ).

JavaFX 2.2 api:

Platform.setImplicitExit(boolean implicitExit)

implicitExit . true, JavaFX , ; JavaFX Application.stop() JavaFX. , , exit(). - true.

, .

+8

, , , jewelsea , - .

, ( jewelsea , , ):

import javafx.application.Application;
import javafx.application.Platform;
import javafx.stage.Stage;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;

public class progtest6 extends Application
{

    /*---------------------------------------------------------*\
        FUNCTION:  main()
    \*---------------------------------------------------------*/
    public static void main(String args[])
    {

        launch(args);

    } /* END:  main() */

    /*---------------------------------------------------------*\
        FUNCTION:  start()
    \*---------------------------------------------------------*/
    @Override
    public void start(Stage stage)
    {

        Media medMsg 
            = 
            new Media(getClass().getResource("msg.mp3").toExternalForm());
        MediaPlayer medplMsg = new MediaPlayer(medMsg);
        medplMsg.setOnEndOfMedia(new Runnable() {
            @Override
            public void run()
            {
                Platform.exit();
            }
        });
        medplMsg.play();

        System.out.println("Here.\n");

    } /* END:  start() */

}

, .

0

All Articles