2017-01-26 6 views
1

チームを設定するために使用するguiがあり、各チームに2人のエンジンと2つのエンジンと1つの機械と1つのAerodinamic plus 1は最も戦略的です。 私たちのguiではすべてを設定し、上記のそれぞれの値を初期化します。私たちのGUIはある種のレースシミュレーションであり、勝者を返すことになっています。私たちはGUIをコンパイルスレッド「JavaFXアプリケーションスレッド」のJava例外を修正しようとしています。java.lang.NullPointerException

しかし毎回、私たちはこのエラーを取得:私たちはどのように、なぜ何かがゼロであり、我々はそれをdebuged、すべてがデバッグで(正常に動作しますようです知らないので

Exception in thread "JavaFX Application Thread" java.lang.NullPointerException at models.Champ.calcRisk(Champ.java:75) at models.Champ.simtRace(Champ.java:102) at views.RScene.start(RScene.java:317) at views.RScene.lambda$0(RScene.java:107) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Node.fireEvent(Node.java:8413) at javafx.scene.control.Button.fire(Button.java:185) at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182) at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96) at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89) at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$MouseHandler.process(Scene.java:3757) at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485) at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:381) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$354(GlassViewEventHandler.java:417) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:416) at com.sun.glass.ui.View.handleMouseEvent(View.java:555) at com.sun.glass.ui.View.notifyMouse(View.java:937) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) at java.lang.Thread.run(Unknown Source)

これは本当に奇妙です)しかし、あなたが単にmainメソッドを実行すると、これらのすべてのエラーが発生します。

我々は我々が持っているレースをシミュレートするための方法出法で

public double calcRisk(TDriver td) { 
     double risk = MIN_RISK; 
     risk += td.getCar().getSetupStrategy(); 
     risk += (100 - td.getTeam().getStrategist().getProficiency()); 
     return risk; 
    } 

ともあります:

double crashRisk = calcRisk(td); 

and this method: 
private void beginRace() { 

     int raceNumber = Interact.game.getChamp().getNumber(); 
     System.out.println("RN " + raceNumber); 

     StartInterac.game.getCham().simulateNextRace(); 

     rScene(); 

    } 

をし、次のエラーは、次の方法である:

private void raceStartScene() { 
     .....rest of the code....... 
     raceBtn.setOnAction(e -> { 
      beginRace(); 
     }); 

     ......rest of the code...... 
    } 

編集:

私たちは、この方法のためにチェック入れDriverPerTeam

と呼ばれるクラスに位置していますgeeTeam amethodています

public double calcRisk(TDriver td) { 
System.out.println("---check----"); 
      System.out.println("1 "+td.getTeam()); 
      System.out.println("2 "+td.getTeam().getStrategist()); 
      System.out.println("3 "+td.getTeam().getStrategist().getProficiency()); 
     System.out.println("-------------"); 
     double risk = MIN_RISK; 
     risk += td.getCar().getSetupStrategy(); 
     risk += (100 - td.getTeam().getStrategist().getProficiency()); 
     return risk; 
    } 

を、今ではこのような答えを返します。

---check---- 
    1 [email protected] 
    2 [email protected] 
    3 71.0 
    ------------- 
    ---check---- 
    1 [email protected] 
    2 [email protected] 
    3 71.0 
    ------------- 
    ---check---- 
    1 null 
    Exception in thread "JavaFX Application Thread" java.lang.NullPointerException 
     at models.Champ.calcRisk(Champ.java:76) 
     at models.Champ.simRace(Champ.java:108) 
     at views.RScene.beginRace(RScene.java:317) 
. 
. 
. 
. 
---check---- 
1 [email protected] 
2 [email protected] 
Exception in thread "JavaFX Application Thread" 3 71.0 
------------- 
---check---- 
1 [email protected] 
2 [email protected] 
3 71.0 
------------- 
---check---- 
1 null 
java.lang.NullPointerException 
    at models.Champ.calcRisk(Champ.java:76) 
    at models.Champ.simRace(Champ.java:108) 
    at views.RScene.beginRace(RScene.java:317) 
. 
. 
. 
. 
. 
. 

誰でも助けることができるのこの状況で私?

+1

[NullPointerExceptionとは何ですか?それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) – resueman

+0

@resuemanその解決策は私たちのために働いていませんでした! –

+0

'Champ 'クラスの75行目はどれですか? –

答えて

0

スタックトレースを見ると、エラーはRScene:107にあり、呼び出し元はjavafxです。だから問題は、beginRaceメソッドとその呼び出し元のraceStartSceneではありません。 私の推測では、このラインである(属性のようです):あなたが暗黙的にcalcRiskを呼び出す

double crashRisk = calcRisk(td); 

(TD)このオブジェクトを作成するとき、あなたはTDがnullでないという保証はありません。

私の良い習慣は、宣言で変数を初期化しないでくださいが、明示的なコンストラクタでそれを行い、失敗可能なすべての可能性をチェックします。

public class YourClass{ 

double crashRisk; 

public YourClass(){ 
TDriver td = ...//get td 
if(td == null){ 
    throw new YourExplicitException(); 
} 
crashRisk = calcRisk(td); 
} 

PS:この行のコンテキストが必要な場合があります。「double crashRisk = calcRisk(td);」より多くの情報源を提供できますか?

+0

コンストラクタのtdはすべてのチームドライバーのリストなので、そのうちの1つのアイデアを得ることはできません –

+0

申し訳ありません、理解するためには完全な情報源が必要です。 – pdem

関連する問題