发现网上一键切换JDK环境的方法都是在mac或Linux下的,本人主力电脑是Windows,于是看了一下WPF的文档,自己开发了一个客户端。
直接上代码吧:
using JavaSwitch.Properties;
using Newtonsoft.Json;
using System;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.IO;
using System.Windows;
using System.Windows.Forms;namespace JavaSwitch
{public class ListItem{public string Text { get; set; }public bool IsSelected { get; set; }public ListItem(string text){Text = text;}}/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{public ObservableCollection<ListItem> Items { get; set; }public MainWindow(){InitializeComponent();// 从本地加载已有的数据LoadDataFromJson();// 数据绑定上下文DataContext = this;}private void Button_Add(object sender, RoutedEventArgs e){FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog{// 设置初始目录RootFolder = Environment.SpecialFolder.Desktop};// 这个方法可以显示文件夹选择对话框folderBrowserDialog.ShowDialog();// 获取选择的文件夹的全路径名string directoryPath = folderBrowserDialog.SelectedPath;// 打印出选择的路径Console.WriteLine(directoryPath);if (string.IsNullOrEmpty(directoryPath)){return;}// 持久化到本地var newItem = new ListItem(directoryPath);Items.Add(newItem);SaveDataToJson();}/// <summary>/// 删除一项/// </summary>private void Button_Delete(object sender, RoutedEventArgs e){var deleteButton = sender as System.Windows.Controls.Button;if (deleteButton != null){var listItem = deleteButton.DataContext as ListItem;if (listItem != null){Items.Remove(listItem);SaveDataToJson();}}}private void Button_Click_1(object sender, RoutedEventArgs e){// 打开环境变量设置页面 rundll32 sysdm.cpl,EditEnvironmentVariablesProcess.Start("rundll32.exe", "sysdm.cpl,EditEnvironmentVariables");//string originalPath = Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine);//System.Windows.MessageBox.Show("Original Path: " + originalPath);}private void RadioButton_Click(object sender, RoutedEventArgs e){var radioButton = sender as System.Windows.Controls.RadioButton;if (radioButton != null){var listItem = radioButton.DataContext as ListItem;if (listItem != null){foreach (var item in Items){item.IsSelected = item == listItem;if (item.IsSelected){// 设置环境变量// 执行bash命令:setx JAVA_PATH "%JAVA_HOME%\bin;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;" /MProcess.Start("cmd", "/c setx JAVA_PATH \"" + item.Text + "\\bin;" + item.Text + "\\lib\\dt.jar;" + item.Text + "\\lib\\tools.jar;\" /M");// 执行bash命令:refreshenv.cmdProcess.Start("cmd", "/c refreshenv.cmd");}}}}SaveDataToJson();}private string ENV_DATA = "JavaEnvironment.json";/// <summary>/// 保存数据到本地/// </summary>private void SaveDataToJson(){var json = JsonConvert.SerializeObject(Items, Formatting.Indented);File.WriteAllText(ENV_DATA, json);}/// <summary>/// 从本地加载数据/// </summary>private void LoadDataFromJson(){if (File.Exists(ENV_DATA)){var json = File.ReadAllText(ENV_DATA);Items = JsonConvert.DeserializeObject<ObservableCollection<ListItem>>(json);}else{Items = new ObservableCollection<ListItem>();}}}
}
布局文件:
<Window x:Class="JavaSwitch.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:JavaSwitch"mc:Ignorable="d"Title="Java环境切换" Height="450" Width="800"><Grid><TextBlock FontSize="18" FontWeight="Bold" Foreground="#ffbe4d4d" HorizontalAlignment="Left" Margin="10,10,0,0" TextWrapping="Wrap" Text="请用管理员身份打开本程序,否则没有权限修改设置!" VerticalAlignment="Top" Width="586"/><TextBlock FontSize="16" HorizontalAlignment="Left" Margin="10,47,0,0" TextWrapping="Wrap" Text="第一步:打开系统变量-Path,检查并添加%JAVA_PATH%(已添加则不用重复添加)" VerticalAlignment="Top" Width="629"/><TextBlock FontSize="16" HorizontalAlignment="Left" Margin="10,84,0,0" TextWrapping="Wrap" Text="第二步:添加已安装的JDK文件夹" VerticalAlignment="Top" Width="263"/><Button FontSize="16" Content="检查环境变量" HorizontalAlignment="Left" Margin="639,47,0,0" VerticalAlignment="Top" Click="Button_Click_1"/><Button FontSize="16" Content="添加一个Java环境" HorizontalAlignment="Left" Margin="257,82,0,0" VerticalAlignment="Top" Click="Button_Add"/><TextBlock FontSize="16" HorizontalAlignment="Left" Margin="10,123,0,0" TextWrapping="Wrap" Text="第三步:点击按钮切换环境" VerticalAlignment="Top"/><ListBox x:Name="listBox" ItemsSource="{Binding Items}" Margin="0,156,0,0"><ListBox.ItemTemplate><DataTemplate><StackPanel Orientation="Horizontal" Margin="0, 10, 0, 10"><Viewbox Height="22" VerticalAlignment="Center"><RadioButton x:Name="radioButton" GroupName="RadioGroup" IsChecked="{Binding IsSelected, Mode=TwoWay}" Click="RadioButton_Click" /></Viewbox><TextBlock Text="{Binding Text}" VerticalAlignment="Center" FontSize="16" Margin="10,0,0,0"/><Button Content="删除" VerticalAlignment="Center" Click="Button_Delete" FontSize="16" Margin="20,0,0,0"/></StackPanel></DataTemplate></ListBox.ItemTemplate></ListBox></Grid>
</Window>
github链接:https://github.com/ITAnt/JavaSwitch
安装文件在根目录的release文件夹