2011-01-17 4 views
3

Я написал очень маленькую функцию для запуска приложения Java в C# NET, но я получаю сообщение об ошибке «Ссылка на объект требуется для не- статическое поле, метод или свойство «MinecraftDaemon.Program.LaunchMinecraft()« C: \ Users \ Mike \ Desktop \ Minecraft \ MinecraftDaemon \ Program.cs ». Я искал другие темы, которые страдают от одной и той же проблемы, но я не понимаю, что это значит или почему я ее получаю.Ссылка на объект требуется для нестатического поля, метода или свойства

namespace MinecraftDaemon 
{ 
    class Program 
    { 
     public void LaunchMinecraft() 
     { 
      ProcessStartInfo processInfo = new ProcessStartInfo("java.exe", "-Xmx1024M -Xms1024M -jar minecraft_server.jar nogui"); 
      processInfo.CreateNoWindow = true; 
      processInfo.UseShellExecute = false; 

      try 
      { 
       using (Process minecraftProcess = Process.Start(processInfo)) 
       { 
        minecraftProcess.WaitForExit(); 
       } 
      } 
      catch 
      { 
       // Log Error 
      } 
     } 

     static void Main(string[] args) 
     { 
      LaunchMinecraft(); 
     } 
    } 
} 
+0

Я думаю, что это потому, что для метода LaunchMineCraft требуется экземпляр. Или этот метод должен быть статичным. – VoodooChild

+0

Интересно, если для данного случая указано предупреждение Compiler? кто угодно? – VoodooChild

ответ

4

Вы должны изменить его на:

public static void LaunchMinecraft() 

Таким образом, статический Main метод может получить доступ к статическим LaunchMinecraft метод.

+1

Другим вариантом, конечно же, является изменение Main() на новую программу(). LaunchMinecraft(); –

0

Вы пытаетесь вызвать метод экземпляра (то есть. Метод, который необходим конкретный объект для работы на) от статического метода (метода, который работает без конкретного объекта). Сделайте также статический метод LaunchMinecraft.

0

Я не знаю много о C#, но метод Main() является статическим, а LaunchMinecraft() - нет, это и есть причина этой ошибки.

4

LaunchMinecraft не является статическим методом, поэтому вы не можете получить к нему доступ по статическому методу Main, не вызывая его из объекта Program.

два варианта
1. Внести LaunchMinecraft статический

public void LaunchMinecraft() 
{ ... } 

2. Создайте новый объект Program в Main и называть его таким образом.

var program = new Program(); 
program.LaunchMinecraft(); 
0
 static void Main(string[] args) 
      { 
       Program pg = new Program(); 
       pg.LaunchMinecraft(); 

      } 

Попробуйте это.

Смежные вопросы