I intend to use JavaFX to play mp3 file. For some reason, I have to use swing component to build UI; I am using JLayeredPane now to overlap Jcomponents. So I really have no chances to use JFXPane.
I checked Java FX Null Pointer Exception when using Media Player at javafx.scene.media.MediaPlayer.init and add
Platform.setImplicitExit(false);
but java.lang.NullPointerException still exists.
complete trace,
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException*
*at ClockFrame$ClockMMPlayer.play(ClockFrame.java:110)
at ClockFrame.mouseDragged(ClockFrame.java:148)
at java.awt.Component.processMouseMotionEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Window.processEvent(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$500(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$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.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$JavaSecurityAccessImpl.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)***
Any comments are welcome and appreciated.
alarm.mp3, https://app.box.com/s/buhcscs4do4r3m8yi9n5coqatvl2c2y2
How to use test code: run and mouse drag on the panel, and then NullPointerException shows.
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import javax.imageio.ImageIO;
import javax.swing.*;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;
public class ClockFrame extends JFrame implements MouseListener, MouseMotionListener{
ClockMMPlayer mmPlayer;
public ClockFrame(){
int frameWidth = 1000;
int frameHeight=1000;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setPreferredSize(new Dimension(frameWidth, frameHeight));
pack();
setVisible(true);
addMouseMotionListener(this);
addMouseListener(this);
mmPlayer=new ClockMMPlayer("./res/sound/alarm.mp3");
}
class ClockMMPlayer extends Application{
MediaPlayer mediaPlayer;
Media media;
JFXPanel fxPanel;
public void start(Stage stage) {
}
public ClockMMPlayer(String filePath) {
assert filePath.length()>0;
JFXPanel fxPanel = new JFXPanel();
Platform.setImplicitExit(false);
Media m = new Media(new File(filePath).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(m);
}
public void play(){mediaPlayer.play();}
}
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseDragged(MouseEvent e) {
mmPlayer.play();
}
@Override
public void mouseMoved(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public static void main(String[] a) {
new ClockFrame();
}
}