非静态字段,方法或属性需要对象引用

我写了一个非常小的函数来在C#NET中启动Java应用程序,但是我收到错误“非静态字段,方法或属性需要对象引用’MinecraftDaemon.Program.LaunchMinecraft()’C:\用户\麦克\桌面\我的世界\ 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(); } } } 

您需要将其更改为:

 public static void LaunchMinecraft() 

这样,静态Main方法可以访问静态LaunchMinecraft方法。

LaunchMinecraft不是静态方法,因此您无法在静态方法Main访问它,而无需从Program对象调用它。

两种选择
1.使LaunchMinecraft静态

 public void LaunchMinecraft() { ... } 

2.在Main创建一个新的Program对象并以此方式调用它。

 var program = new Program(); program.LaunchMinecraft(); 

您试图从静态方法(一种没有特定对象的方法)调用实例方法(即需要特定对象进行操作的方法)。 使LaunchMinecraft方法也是静态的。

我对C#了解不多,但Main()方法是静态的,而LaunchMinecraft()则不是,这就是导致此错误的原因。

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

尝试这个。