2011-01-17 22 views
3

C#NETでJavaアプリケーションを起動するための非常に小さな関数を書きましたが、エラーが発生しています。「オブジェクト参照は、静的フィールド、メソッド、またはプロパティ '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

この場合、コンパイラの警告が表示されるのだろうか?誰でも? – VoodooChild

答えて

4

public static void LaunchMinecraft() 

その方法を、静的Main方法は静的LaunchMinecraftメソッドにアクセスすることができます。

+1

もちろん、Main()を新しいProgram()に変更することもできます。LaunchMinecraft(); –

0

あなたは、静的メソッド(特定のオブジェクトなしで動作方式)からインスタンスメソッド(すなわち上で動作する特定のオブジェクトを必要とするメソッド)を呼び出すようにしようとしています。 LaunchMinecraftメソッドも静的にします。あなたはそれを変更する必要が

0

私はC#についてよくわかりませんが、LaunchMinecraft() ではなく、Main()メソッドは静的ですが、それがこのエラーの原因です。

4

LaunchMinecraftは静的メソッドではないため、Programオブジェクトから呼び出さずに静的メソッドMainにアクセスすることはできません。

つのオプション
静的

public void LaunchMinecraft() 
{ ... } 

2を作るMainに新しいProgramオブジェクトを作成し、そのようにそれを呼び出します。

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

      } 

これを試してみてください。

関連する問題