Java 编辑Windows环境变量不起作用

Java 编辑Windows环境变量不起作用,java,environment-variables,windows-8.1,Java,Environment Variables,Windows 8.1,如何使用Java代码和在Windows上编辑系统或用户变量?我只发现了一个问题,但似乎没用。为什么以下两个代码段不起作用 import com.sun.jna.Library; import com.sun.jna.Native; public class Environment { public interface WinLibC extends Library { WinLibC INSTANCE = (WinLibC) Native.loadLibrary

如何使用Java代码和在Windows上编辑系统或用户变量?我只发现了一个问题,但似乎没用。为什么以下两个代码段不起作用

import com.sun.jna.Library;
import com.sun.jna.Native;

public class Environment
{
    public interface WinLibC extends Library
    {
        WinLibC INSTANCE = (WinLibC) Native.loadLibrary("msvcrt",
                WinLibC.class);

        public int _putenv(String name);
    }

    public static void main(String[] args)
    {
        WinLibC.INSTANCE._putenv("MYVARIABLE=MYVALUE");
    }
}


没有编写环境变量,什么也不会发生。

您不需要JNA来获取环境变量。 System.getenv正是这样做的

另一方面,在Java中设置持久性环境变量通常是个坏主意。它会降低程序的可移植性不同的系统具有不同的环境变量可见性/持久性概念,并且会混淆JVM和实际系统环境之间的区别


当然,如果你一定要,您需要在Linux/Unix和Windows上使用。

为什么在关于操作环境变量的问题中向我们展示JNA printf代码?@Andrew Medico:作为映射本机函数的示例。我认为可以安全地假设,能够回答此问题的人不需要调用完全无关函数的示例。@Andrew Medico:当人们不编写Java而编写C或其他程序时,提供一个示例代码是很有用的,并且了解librariesThanks,您发送的代码非常有用。当我想编写一个Java程序来进行持久的环境变量更改时,这不是一个坏主意。我会看看是否能用你的提示让它工作:
import com.sun.jna.Library;
import com.sun.jna.Native;

public class Environment
{
    WinLibC clib = (WinLibC) Native.loadLibrary("msvcrt", WinLibC.class);

    public Environment()
    {
        setenv("myVariable", "myValue");
    }

    public interface WinLibC extends Library
    {
        public int _putenv(String name);
    }

    public void setenv(String variable, String value)
    {
        clib._putenv(variable + "=" + value);
    }

    public static void main(String[] args)
    {
        new Environment();
    }
}