OSX nosound wegen GC

Darano

Mitglied
Hallo zusammen,
Vorab : ich weiß nicht ob ich hier im richtigen Forum bin, aber wir haben nen Musicplayer in JavaFX geschrieben und folgendes Problem ist aufgetreten, deswegen habe ich es hier gepostet.Falls ich im falschen Forum bin, sorrrrryyy.

Also zum Problem: Wir haben einen MusikPlayer geschrieben und er funktioniert auch ohne Probleme. Als ich dann das fertige Projekt, dass meine Kommilitonen und ich auf unseren Windows Rechnern geschrieben haben, auf meinen Mac exportiert habe, habe ich das Problem dass ich nichts höre wenn ich einen Song abspiele.
Habe aber keine Exceptions oä geworfen bekommen und die Songs wurden auch gefunden, nur beim Abspielen kam einfach nichts aus meinen Lautsprechern.
Habe ein wenig gegoogelt und gelesen dass dies ein bekanntes Problem ist und am GarbageCollector auf osx liegt.
Habe dann den MediaPlayer als Klassenvariable definiert damit der GC den nicht einsammelt und dadurch höre ich vielleicht ne viertel Sekunde Sound, aber dann auch nichts mehr.

Also dieser Code funktioniert auf meinem Win10 Tower einwandfrei aber auf meinem mac nicht vereinfach gesagt:
Java:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;

import java.io.File;

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        BorderPane root = new BorderPane();

        File file = new File("/users/xxx/desktop/xxx/Song.mp3");
        Media media = new Media(file.toURI().toString());
        MediaPlayer player = new MediaPlayer(media);
        player.play();

        primaryStage.setScene(new Scene(root, 600, 400));
        primaryStage.show();
    }
}

Wenn ich zb den code
Java:
player.setCycleCount(MediaPlayer.INDEFINITE);
einfüge, höre ich auf dem mac den Song , aber der looped dadurch.^^

Hat jemand ne Idee was ich machen könnte? Würde mich über jede Antwort freuen :) damit ich endlich vom Sofa aus weiter Coden kann und nicht immer vorm Rechner sitzen muss :D
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Also dieser Code funktioniert auf meinem Win10 Tower einwandfrei aber auf meinem mac nicht vereinfach gesagt:
Auf meinem Mac funktioniert das wunderbar und problemlos...

Welche Java-Version und welches macOS nutzt du?

Habe ein wenig gegoogelt und gelesen dass dies ein bekanntes Problem ist und am GarbageCollector auf osx liegt.
Habe dann den MediaPlayer als Klassenvariable definiert damit der GC den nicht einsammelt und dadurch höre ich vielleicht ne viertel Sekunde Sound, aber dann auch nichts mehr.
Mich würd interessieren, wo du das gefunden hast, hast du nen Link dazu?
 

Darano

Mitglied
Hallo mrBrown,
erstmal Danke für die Antwort. Ich laufe auf High Sierra 10.13.14 (update momentan aber) und benutze Java9. Ich habe dieses Problem auch in einem Uniforum von uns angesprochen, da konnte mir auch nicht geholfen werden und mir wurde dort gesagt dass dieses Problem einige haben.
Hier ist ein Link zu dem Thema auf stackoverflow:
https://stackoverflow.com/questions/29870368/javafx-mediaplayer-music-stops-after-10-seconds

Ich habe alles probiert, die Variablen final, static oder sonst was als Klassenvariablen zu definieren aber nichts funktioniert . Wenn ich setCycleCount setze, wird der Song abgespielt. Habe auch shcon versucht mit der Funktion ein wenig rumzuspielen aber nichts hat geholfen.
Einfach nur ärgerlich, vielleicht funktioniert es ja nachdem ich mein OSX geupdatet habe.

Lg

Edit: Java Version ist 9.0.4 und die mein osx jetzt auf 10.13.4 aber funktioniert noch nicht
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
mit Java 9 konnte ich's grad reproduzieren - aber die Deklaration als Instanzvariable hat geholfen (was auch zu erwarten ist, wenns am GC liegt).
Mich würde es wundern, wenn das bei dir nicht hilft, das spräche für ein anderes Problem
 

Darano

Mitglied
Kannst du mir den Code mal schicken mit der Instanzvariable? Ich meine, ich bin nicht blöd ich weiß was das ist aber bei mir funktioniert es einfach nicht :D Auf welcher osx version läuft dein Mac? Vielleicht formatiere ich einfach mal und installiere alles neu
 

mrBrown

Super-Moderator
Mitarbeiter
Aktuell 10.13.5 Beta, ich bezweifle aber, dass das für den Unterscheid verantwortlich ist...


Java:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.stage.Stage;

import java.io.File;

public class Main extends Application {
    MediaPlayer player;
@Override
    public void start(Stage primaryStage) throws Exception {
        BorderPane root = new BorderPane();

        File file = new File("/users/xxx/desktop/xxx/Song.mp3");
        Media media = new Media(file.toURI().toString());
        this.player = new MediaPlayer(media);
        player.play();

        primaryStage.setScene(new Scene(root, 600, 400));
        primaryStage.show();
    }
}
 

Darano

Mitglied
Oh man, genau so habe ich es auch probiert, auch die variablen als static wie einige leute auf stack geschrieben haben. Aber es kütt einfach nichts.

:mad::mad:

Edit: wenn ich setCycleCount(2) mache, wird der Song einmal abgspielt wie gewünscht. Aber dann funktionieren meine next,play und pause methoden nicht mehr wirklich . Die sind dann irgendwie total verbuggt
 
Zuletzt bearbeitet:

Darano

Mitglied
Ich konnte das Problem nun lösen, indem ich ein
Java:
player.stop();
vor
Java:
player.start();
gesetzt habe.

¯\_(ツ)_/¯

Lg
 

Ähnliche Java Themen


Oben