2016-11-25 137 views
-1

我知道這聽起來很簡單,但我在初始化對象時遇到了問題。每當我運行我的代碼。我不斷收到錯誤。我需要初始化上線27C#初始化對象

遭遇「」類型的未處理的異常「System.NullReferenceException」發生在WPFBattle.exe」。‘

於是我問別人,他們告訴我

’你忘記在MainWindow的構造函數中初始化遇到了,因爲你沒有初始化它,但仍然將它傳入,遇到的是空值,這意味着你不能調用autobattle。公共icombat遭遇是聲明,它不是初始化它可以像使用new關鍵字和戰鬥構造函數一樣使用任何用戶定義的對象來初始化它。「

所以我試圖做到這一點,但我不斷收到錯誤。我不知道爲什麼它不工作。我重視我的代碼的圖片,任何幫助將不勝感激

PICTURE OF MY CODE

PICTURE OF MY CODE 2

1 namespace WPFBattle 
2 { 
3  
4  
5  public partial class MainWindow : Window 
6  { 
7   private TextBoxStreamWriter consoleWriter; 
8   private TextBox outputField; 
9   private IList<ICharacter> playerParty = new List<ICharacter>(); 
10   public ICombat encounter; 
11   private CombatThread combatThread; 
12  
13   public MainWindow() 
14   { 
15    InitializeComponent(); 
16  
17    // Redirect console 
18    consoleWriter = new TextBoxStreamWriter(outputField); 
19    Console.SetOut(consoleWriter); 
20  
21    //creates the two parties 
22    List<ICharacter> party = new List<ICharacter>(); 
23    List<ICharacter> enemy = new List<ICharacter>(); 
24  
25  
26  
27    //PLACE I NEED TO INITIALIZE MY OBJECT AT 
28  
29  
30    combatThread = new CombatThread(encounter); 
31    combatThread.Start(); 
32   } 
33  
34   private void textBox_TextChanged(object sender, TextChangedEventArgs e) 
35   {  
36  
37   } 
38  
39  
40  } 
41 } 
+0

你有任何繼承ICombat的類嗎?你可能會遇到類似於=新的Combat(); – Davatar

+0

@Davatar謝謝你的迴應。在第一張圖片附件中,我包含了我的CombatThread代碼。 – firmfiasco

+0

@MohitShrivastava我之前看到過這個問題,並通讀了解答案,但我無法找到一種方法來實現它與我的代碼 – firmfiasco

回答

1

在第10行:你有下面的代碼:

public ICombat encounter; 

但這個變量的遭遇永遠不會成爲一個值。所以它是空的。在第30行:你將這個空值傳遞給你的combatThread。

combatThread = new CombatThread(encounter); 

如果combatThread訪問遭遇類似的地方:

encounter.DoSth(); 

,則會引發

的NullReferenceException

因爲遇到的是類型ICombat的,這是一個接口,你不能使用它的新操作符。你需要一個實現這個接口的類。

public class Combat : ICombat 
{ 
    //Implement what the Interface need 
} 

併爲您的遭遇引用創建一個新的對象。

encounter = new Combat(); //IMPORTANT 
combatThread = new CombatThread(encounter); 
combatThread.Start(); 
+0

非常感謝! – firmfiasco

+0

@firmfiasco你是怎麼做TextBoxStreamWriter類的? – wolfclique

0

要初始化遇到需要調用

public class Combat : ICombat 
{ 
    //Combat class 
} 

encounter = new Combat()//and of course provide necessary parameters if needed 

雖然因爲你」我已經試過,我猜這個問題在別的地方。 你如何在CombatThread中使用相遇?我猜你在CombatThread中保留了一個引用,但是已經忘記了或者對CombatThread.mEncounter進行了錯誤的分配。

在CombatThread中你如何初始化遇到的引用?

+0

謝謝你的迴應。在第一張圖片附件中,我包含了我的CombatThread代碼。 – firmfiasco

+0

如果你在CombatThread.Thread.Start()上放置一個斷點,是否真的遇到null? Autobattle()會發生什麼?也許空引用是從那裏拋出的? – user3532232

+0

我在第30行添加了一個斷點,它工作正常,但是當我繼續行31時,它會拋出null refrence。 – firmfiasco