2016-07-03 20 views
1

Ich habe eine Anwendung, die sich absolut gut öffnet, aber ich habe Probleme, ein Symbol dafür zu setzen. Das Symbol, dem ich den Pfad gebe, ist dort, und der Wechsel zu einem anderen Bild in diesem Verzeichnis zeigt das Symbol 9/10 mal, aber dieses Bild wird nie angezeigt. Es gibt immer ein Fragezeichen an seinem Platz. Also auch auf eine andere Datei, von der ich weiß, dass sie funktioniert (dh nicht korrupt ist), wie kommt es nur so selten vor?JavaFX App Symbol schlägt fehl, 9/10 mal zu zeigen

Unten ist der Code von MyApplication.java

package MyApp; 

import MyApp.Variables.Constants; 

import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.stage.Stage; 

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("Forms/FormMain.fxml")); 

     primaryStage.getIcons().add(new Image(getClass().getResourceAsStream("/img/appicon.png"))); 
     primaryStage.setTitle("MyApp " + Constants.VERSION_NAME + " (" + Constants.RELEASE_ID + ")"); 
     primaryStage.setScene(new Scene(root, 1000, 800)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

unterhalb der Projektverzeichnisstruktur wird im Zusammenhang/img/zu Main.java:

Directory structure

ich alle Lösungen versucht haben here aber nichts hat mein Problem behoben.

Unter Ubuntu 16.04, IntelliJ IDEA für die IDE ausgeführt, obwohl das Problem mit einer exportierten JAR-Datei besteht.

+0

Verwenden [neues Bild ("Datei: /img/appicon.png")] wenn es funktioniert. überprüfen Sie auch diese http://download.java.net/jdk8/jfxdocs/javafx/scene/image/Image.html wie für das Jar, das Sie verwenden müssen [new Image (getClass(). getResourceAsStream ("/ img/appicon. png ");] – GOXR3PLUS

+0

Ich fürchte, das hat nicht funktioniert. Ich habe mir die Dokumente angeschaut, aber ich bin nicht wirklich sicher, was ich daraus ziehen könnte. Ich habe verschiedene Konstruktoren benutzt und stattdessen einen Stream übergeben von einer Zeichenkette, Hintergrund lädt, nichts hat funktioniert –

+0

Wenn Sie es als ein Jar exportieren, müssen Sie es als Stream mit Hilfe eines neuen Image (getClass(). getResourceAsStream ("/ img/appicon.png"); können Sie eine Bild von, wie Ihr Projekt konstruiert wird? – GOXR3PLUS

Antwort

3

Das Laden von Daten von Ihrer Festplatte ist zeitaufwändig, so dass Sie mit dem Laden des Symbols beginnen können, während das Objekt erstellt wird. Platzieren Sie es in einem Konstruktor und speichern Sie es in einem Instanzelement. Normalerweise müssen Sie mehr als ein Symbol hinzufügen, da jede Plattform eigene Größen benötigt (für Links usw.).

package MyApp; 

import MyApp.Variables.Constants; 

import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.stage.Stage; 

public class Main extends Application { 

    private Image icon; 

    public Main() { 
     icon = new Image(Main.class.getResource("/img/appicon.png").toExternalForm()); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("Forms/FormMain.fxml")); 

     primaryStage.getIcons().add(icon); 
     primaryStage.setTitle("MyApp " + Constants.VERSION_NAME + " (" + Constants.RELEASE_ID + ")"); 
     primaryStage.setScene(new Scene(root, 1000, 800)); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

war mein Symbol dies: enter image description here und die Struktur app in Netbeans sieht wie folgt aus:

enter image description here

und die laufende App so aussehen:

enter image description here

+0

getResource akzeptiert nur einen String, der keine Parameter akzeptiert. –

+0

Entschuldigung meine schlechte, falsche Position für String. – NwDev

+0

Ich habe es während der Bearbeitung versucht - es kann immer noch keine Anwendungsinstanz usw. aufgrund von InvocationTargetException im systemeigenen Code erstellen, da NullPointerException von getResource null ist. Das Entfernen des Punktes am Anfang bewirkt, dass getResource nicht länger null ist, die Anwendung wird gestartet, das Symbol wird jedoch weiterhin nicht angezeigt. –