使用JavaFX设置应用程序图标时遇到问题

问题描述:

我在使用JavaFX更改应用程序图标时出现问题(代码如下,我的注释已被注释掉)。我试图从以前的堆栈溢出答案实施几个解决方案,但我不确定现在是否弃用这些方法。我正在使用NetBeans 8.2(并且该图标位于源包下名为images的文件夹中)。使用JavaFX设置应用程序图标时遇到问题

第一次尝试:非法开始表达。标识预期:JavaFX Application Icon

第二尝试:发现添加(java.awt.Image中)没有合适的方法:Changing the icon of my java application

第三尝试:无法找到象征。 Cannot instantiate the type Image java?

第5次尝试:图像是抽象的,它不能实例化。 http://docs.oracle.com/javafx/2/deployment/self-contained-packaging.htm

package javafxapplication1; 

import java.awt.Image; 
import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.stage.StageStyle; 

import javafx.event.EventHandler; 
import javafx.scene.input.MouseEvent; 
import javax.imageio.ImageIO; 


public class JavaFXApplication1 extends Application { 
    private double xOffset = 0; 
    private double yOffset = 0; 


    @Override 
    public void start(Stage stage) throws Exception { 

     //stage.getIcons().add(Image(<JavaFXApplication1>.class.getResourceAsStream("/images/fiji.png")); 

     Image i = ImageIO.read(getClass().getResource("/images/fiji.png")); 
     //setIconImage(i); 
     //stage.getIcons().add(i); 

     //stage.getIcons().add(Image("/images/fiji.png")); 

     // stage.getIcons().add(ImageIO.read(getClass().getResource("/images/fiji.png"))); 

     //stage.getIcons().add(new Image(this.getClass().getResourceAsStream("/images/fiji.png"))); 

     Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml")); 
     //stage.initStyle(StageStyle.UNDECORATED); 
     // makes it moveble 
     // LOOK INTO!!!!!!!!!!! 
     root.setOnMousePressed(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       xOffset = event.getSceneX(); 
       yOffset = event.getSceneY(); 
      } 
     }); 
     root.setOnMouseDragged(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
      stage.setX(event.getScreenX() - xOffset); 
      stage.setY(event.getScreenY() - yOffset); 
      } 
     });   
     Scene scene = new Scene(root); 

     stage.setScene(scene); 
     stage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

你需要加载图像,并将其添加到舞台上的图标。

import javafx.scene.image.Image; 
Image icon = new Image(Controller.class.getResource("/game.png").toExternalForm(), false); 
primaryStage.getIcons().add(icon); 

但是,在Ubuntu上,这些图标不会显示。这个JavaFX缺陷已经很久没有解决了。

看来你的第一次尝试中缺少图像实例化的关键字,并确保它是一个javafx.scene.image.Image,不是java.awt.Image图像,具有不同的构造。试试这个:

stage.getIcons().add(new Image(JavaFXApplication1.class.getResource("/images/fiji.png").toExternalForm());