Java 8が正しくインストールされており、それがOracleバージョン(OpenJDKではなく)です。私のIDEはEclipseです。私はJavaFXのプロジェクトに次のコードを実行すると、JavaFXメディアプレーヤーがクラッシュするのはなぜですか?
import java.io.File;
import javafx.embed.swing.JFXPanel;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
public class TestPlayer {
static JFXPanel fxPanel =new JFXPanel();
private Media song;
private MediaPlayer mediaPlayer ;
public TestPlayer(String filePath) {
song=new Media(new File(filePath).toURI().toString());
mediaPlayer = new MediaPlayer(song);
}
public void play() {
this.mediaPlayer.play();
}
public static void main(String[] args) {
new TestPlayer("song\\1.mp3").play();
}
}
mediaPlayer
にのみ、その後は音なし例外がスローされません、数秒間、曲を再生することができます。
private static Media song;
に
private Media song;
から8行目を変更し、変更されたコードが正常に実行されました。
問題は解決しましたが、理由を知りたい。これらの2次のスクリーンショットは、変更前のEclipse
の違いは、 "JFXMediaプレーヤーEventQueueThread" です。
'static'を追加することは、正しい修正であるとは考えにくいでしょう。クラッシュしたときからスタックトレースを投稿できますか? –
静的を追加すると、インスタンスが作成されましたか。 –
ここで 'static 'を追加することで違いは、' Media'インスタンスがスコープから外れるのを防ぐことです。私は、実際にメディアを再生しているスレッドは弱い参照しか保持していないと思います。実際のアプリケーションでは、これは明らかに問題ではありません。 –