Javafx媒体播放导致NullpointerException(使用Swing)

时间:2017-02-20 06:15:15

标签: java swing javafx-8

我打算用JavaFX播放mp3文件。出于某种原因,我必须使用swing组件来构建UI;我现在使用JLayeredPane来重叠Jcomponents。所以我真的没有机会使用JFXPane。

我检查了Java FX Null Pointer Exception when using Media Player at javafx.scene.media.MediaPlayer.init并添加了

Platform.setImplicitExit(false);

但java.lang.NullPointerException仍然存在。

完成追踪,

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)*** 

欢迎并赞赏任何评论。

alarm.mp3,https://app.box.com/s/buhcscs4do4r3m8yi9n5coqatvl2c2y2

如何使用测试代码:在面板上运行并拖动鼠标,然后显示NullPointerException。

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();
}



}

0 个答案:

没有答案