2017-05-13 143 views
0

我一直在嘗試一段時間,以下各種文件,但我不能讓任何圖像顯示在JavaFX上。圖片將不會顯示在JavaFX

這裏是我的代碼:

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
//stage and stuff 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 
//images 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 

public class KingsGame extends Application { 

    public static ImageView iv = new ImageView(); 
    Button btn = new Button(); 
    public static Image test = new Image("http://puu.sh/vOk8i/754c8fee68.png"); 

    @Override 
    public void start(Stage primaryStage) { 
     //stackpane 
     StackPane root = new StackPane(); 
     root.getChildren().add(iv); 
     //scene 
     Scene scene = new Scene(root, 1280, 720); 

     primaryStage.setTitle("test program lol"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
     //---actual game--- 
     drawMainMenu(); 
    } 

    public void helloTest() { 
     btn.setText("Say 'Hello World'"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 

      @Override 
      public void handle(ActionEvent event) { 
       System.out.println("Hello World!"); 
      } 
     }); 
    } 

    public static void drawMainMenu() { 
     iv.setImage(test); 
    } 

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

} 

每當我運行程序時,我得到的是這樣的:http://puu.sh/vOko6/b669cfc20b.png

奇怪的是,當我最初測試了這一點,我用這個(https://osu.ppy.sh/ss/8062698)圖像鏈接作爲我的測試圖像,它以某種方式工作,即使沒有.jpg或.png擴展名。這是一個遊戲截圖,我只是使用遊戲給我測試的鏈接。當我將它切換到另一個測試鏈接時,它剛剛打破。

我如何獲得所有圖像鏈接的工作?

+0

您應該刪除所有出現的'靜態'並在'start'方法中初始化你的圖像。用戶界面對象不應該是靜態的,因爲它們需要在UI線程中創建和管理。 – VGR

+0

我認爲我所有的圖像聲明方法之外,將允許我在多種方法中使用它,因爲我想要一個單獨的方法負責打印每個單獨的圖像。 我試試這個,也許工作,所以我仍然可以使用單獨的方法每個圖像。謝謝。 – Enkrypton

回答

1

它看起來像一個訪問問題。

如果打印使用此指令返回的異常: System.err.println(test.getException());

你得到這樣的: 產生java.io.IOException:服務器返回的HTTP響應代碼:的網址:http://puu.sh/vOk8i/754c8fee68.png

該網站可能只授權的瀏覽器客戶端

+0

如果這是問題,您是否有任何其他圖像託管建議,將與JavaFX一起工作? – Enkrypton

+0

@Enkrypton您可以通過[從InputStream創建圖像](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/image/Image.html#Image-java)解決此問題。 io.InputStream-)而不是來自String。在調用連接的[getInputStream()方法之前,可以通過創建URL,打開URLConnection並在連接上調用諸如'setRequestProperty(「User-Agent」,「Wget/1.16(linux-gnu)」) )](https://docs.oracle.com/javase/8/docs/api/java/net/URLConnection.html#getInputStream--)方法。 – VGR