JavaFX Application -Icon wird falsch dargestellt

cw.java

Mitglied
Hallo Community,

bin da auf ein kleines Problem gestoßen! Ich habe mit JavaFX 8 ein Programm geschrieben was auch alles so Funktioniert wie es soll bzw. sollte. Denn als letztes habe ich ein <fx: include> gemacht in der FXML was für den Aufbau eines Tabs ist und dazu den dazugehörigen Controller initialisiert. Das Funktioniert auch alles wunderbar kann mit allem Arbeiten doch wenn ich nun die App öffne wird das Applikation Icon nicht mehr richtig dargestellt.

Habt ihr den Fehler auch schon mal gehabt oder habe ich da was Falsch gemacht?

Wenn ich das <fx: include> wieder raus nehmen geht das Icon auch wieder!!!

Hier mal der Include Auszug:

Java:
<Tab text="XML schreiben">
               <content>
                  <fx:include fx:id="WriteXMLTabView" source="WriteXMLTabView.fxml"/>
               </content>
          </Tab>

Wäre super wenn mir da einer Helfen könnte!!!

mfg
cw.java
 
Zuletzt bearbeitet:
Hm. Das ist mir selbst noch nicht passiert und ich habe es schon mehrfach verwendet (praktisches Feature, finde ich). Was macht der Controller deines WriteXMLTabs? Macht der vielleicht etwas spezielles an dieser Stelle?
 
Hallo dzim,

nein der Controller zu dem Tab macht nichts spezielles an dieser Stelle, der erstellt lediglich eine XML aus bestimmten Daten die man zuvor eingeben muss.

Ich habe da mal zwei Screenshots gemacht die den Fehler Zeigen.

Bei diesem Screenshot ist das <fx:include> nicht drin und das Icon wird richtig dargestellt!

Anhang anzeigen 7484

Bei diesem Screenshot ist das <fx:include> drin und das Icon wird falsch dargestellt!

Anhang anzeigen 7485

Das Icon ist ein 32px x 32px habe auch schon ein 16px x 16px daraufhin probiert aber tritt immer der selber Fehler auf.

mfg
cw.java
 
Zuletzt bearbeitet:
Ich bin mir nicht sicher aber ich glaube der Fehler tritt deswegen auf weil ich die FXMLs auf zwei verschiedene Arten lade.

Ich lade die die FXMLs einmal per FXMLLoader und dann dann eben einmal per include.

Hier mal der Code zum laden per FXMLLoader:
[Java]
/**
* Initializes the root layout.
*/
public void initRootLayout() {
try {
// Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml"));
rootLayout = (BorderPane) loader.load();

// Show the scene containing the root layout.
Scene scene = new Scene(rootLayout);
primaryStage.setScene(scene);

// Give the controller access to the main app.
RootLayoutController controller = loader.getController();
controller.setMainApp(this);

primaryStage.show();
} catch (IOException e) {
e.printStackTrace();
}

// Try to load last opened person file.
File file = getJobFilePath();
if (file != null) {
loadJobDataFromFile(file);
}
}

/**
* Shows the RechnerView inside the root layout.
*/
public void showRechnerView() {
try {
// Load RechnerView
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/RechnerView.fxml"));
AnchorPane rechnerView = (AnchorPane) loader.load();


// Set RechnerView into the center of root layout.
rootLayout.setCenter(rechnerView);

// Give the controller access to the main app.
RechnerViewController controller = loader.getController();
controller.setMainApp(this);
} catch (IOException e) {
e.printStackTrace();
}
}
[/Java]

Die RechnerView enthält ein TabPane mit zwei Tabs und im zweiten Tab setze ich eine weitere FXML aber diesmal per <fx:include > damit ich nicht alles über ein Controller laufen lassen muss.

Vielleicht liegt darin der Fehler?
 
Das sollte keinen Einfluss haben. Bei mir hat es das jedenfalls nicht.

In dem Code setzt du das Icon nicht, oder? Mach doch vielleicht mal einen Test: Lade die Layouts und setze erst hinterher das Icon mit stage.getIcons().add(new Image("file:icon.png"));
 
Hey,

ich lade das Icon schon so wie du es Vorgeschlagen hast siehe Code.

[Java]
@Override
public void start(Stage primaryStage) {
this.primaryStage = primaryStage;
this.primaryStage.setTitle("MounterKoordinatenRechner (MKR)");

// Set the application icon.
this.primaryStage.getIcons().add(new Image("file:resources/images/Calc.png"));

initRootLayout();

showRechnerView();
}
[/Java]

Doch leider ist der Fehler damit auch nicht behoben!

Aber dennoch kann ich den Fehler nun weiter eingrenzen, habe das Programm gestern Abend mal auf einem Windows Rechner laufen lassen und siehe da, der Fehler besteht da nicht! Also gehe ich mal davon aus das es an dem MacOSX liegt.

Ich denke mal es liegt daran das Mac seine eigene JavaRuntime den User zur Verfügung stellt. Bin mir da aber nicht ganz sicher.

Mal gucken was sich da machen lässt nehme das jetzt unter MacOSX erstmal so hin da das Programm eh ehr auf einem Windows System laufen wird.

Trotzdem Danke erstmal

mfg
cw.java
 

Neue Themen


Zurück
Oben