2016-04-17 3 views
0

こんにちは、私はあまりコーダーではありません。私は最近、非常に単純なdxballのscenerioを示すコードを試しました。そこには、「スコア:0」を示すテキストも印刷したいと考えていました。私は以下のコードを与えています[コンパイルは正常ですが、実行時のエラーが表示されます]、友達のコンピュータ上で、出力画面にテキストを表示してもエラーは発生しません。javafxでテキストを印刷しようとすると、白いウィンドウが表示され、nullpointerexceptionエラーが表示されます

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.shape.Circle; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 
import javafx.scene.control.Button; 
import javafx.scene.paint.Color; 
import javafx.scene.text.Text; 
import javafx.scene.text.Font; 

public class dxball extends Application{ 

    public void start(Stage stage){ 

     Group root= new Group(); 
     Scene scene=new Scene(root,700,500); 
     Text t=new Text(20,20,"Score:0"); 
     t.setFont(Font.font("Verdana", 20)); 
     t.setFill(Color.BLACK); 
     root.getChildren().add(t); 
     Circle ball=new Circle(340,455,15); 
     ball.setFill(Color.CORNFLOWERBLUE); 

     Rectangle brick1=new Rectangle(200,470,280,30); 
     brick1.setFill(Color.PALEGREEN); 
     brick1.setStroke(Color.CYAN); 

     Rectangle brick2=new Rectangle(100,100,80,40); 
     brick2.setFill(Color.CORAL); 
     brick2.setStroke(Color.BLACK); 

     Rectangle brick3=new Rectangle(200,100,80,40); 
     brick3.setFill(Color.CORAL); 
     brick3.setStroke(Color.BLACK); 

     Rectangle brick4=new Rectangle(300,100,80,40); 
     brick4.setFill(Color.CORAL); 
     brick4.setStroke(Color.BLACK); 

     Rectangle brick5=new Rectangle(400,100,80,40); 
     brick5.setFill(Color.CORAL); 
     brick5.setStroke(Color.BLACK); 

     Rectangle brick6=new Rectangle(500,100,80,40); 
     brick6.setFill(Color.CORAL); 
     brick6.setStroke(Color.BLACK); 

     Rectangle brick7=new Rectangle(250,150,80,40); 
     brick7.setFill(Color.CYAN); 
     brick7.setStroke(Color.BLACK); 

     Rectangle brick8=new Rectangle(350,150,80,40); 
     brick8.setFill(Color.CYAN); 
     brick8.setStroke(Color.BLACK); 

     root.getChildren().add(brick1); 
     root.getChildren().add(brick2); 
     root.getChildren().add(brick3); 
     root.getChildren().add(brick4); 
     root.getChildren().add(brick5); 
     root.getChildren().add(brick6);   
     root.getChildren().add(brick7); 
     root.getChildren().add(brick8); 
     root.getChildren().add(ball); 

     stage.setTitle("Untitled"); 
     stage.setScene(scene); 
     stage.show(); 
    } 

} 

。私がいないため、JDKのバージョンの enter image description here

+1

スクリーンショットへのリンクではなく、質問にスタックトレースをテキストとして含めてください。これはフォントの問題のようです。どのJDKバージョンを使用していますか? –

+0

あなたが呼び出しているコンピュータにあなたのフォントがインストールされていないようです。 – Blip

+0

FWIW、提供されたアプリケーションコードは、OS X 10.9.5とJava 8u72で例外なく、うまく動作します。 – jewelsea

答えて

0

その表示されますどのようなコードを実行しようとすると、私は写真を添付し​​ています:( を助けるためにあなたがISN「を使用するフォントのものとすることができるしてくださいトンお使いのシステムに存在してそれがうまく私のために働いVerdana.tffファイルが

Cに存在するかどうかを確認します。。\ WINDOWS \フォント

ディレクトリ。インストールしていない場合は実行してください。

+0

[documentation](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/text/Font.html#font-java.lang.String-double-)によると、フォントがシステム上に存在しない場合、 'Font.font(...)'は、利用可能な適切なものに置き換えられます。これはJavaFXバグのようです。その意味では、実際にはJDKのバージョンの問題かもしれません。フォントがすべての可能なユーザーのマシンにインストールされていることを、開発者が確実に確かめることは期待できません。 –

+0

開発者は[自分のアプリケーション配布でリソースとしてフォントを含めることができます](http://stackoverflow.com/questions/16855677/how-to-embed-ttf-fonts-is-javafx-2-2)あるフォントがそれを法的に行うためのライセンス配布権を確認する必要があります。 – jewelsea

+0

@prasanna私のCドライブにフォントが存在することを確認しました。 – Foodaki

関連する問題