我正在用相同的代码用控制台应用程序和wpf应用程序编写c#编程,但是结果不同。
这是控制台应用程序中的代码。
javaAccessBridge = Jab.Instance;
javaAccessBridge.Init();
using (JavaApplication app = new JavaApplication())
{
JavaApplicationContext context = new JavaApplicationContext()
{
ExecutableFile = @"c:\Dev\sq.jar"
};
app.Launch(context);
}
Thread.Sleep(5000);
// return 0, not found any jvm instance.
javaAccessBridge.EnumJvms().Count;
这是WPF中的代码
public MainWindow()
{
InitializeComponent();
javaAccessBridge = Jab.Instance;
javaAccessBridge.Init();
}
private void Find_Click(object sender, RoutedEventArgs e)
{
using (JavaApplication app = new JavaApplication())
{
JavaApplicationContext context = new JavaApplicationContext()
{
ExecutableFile = @"c:\Dev\sq.jar"
};
app.Launch(context);
}
// count 1 jvm instance.
List<AccessibleJvm> jvms = javaAccessBridge.EnumJvms();
}
我运行应用程序,然后单击按钮触发Find_Click,并且jvms.Count = 1。 我认为原因是WPF的线程太多,一个用于MainWindow(),第二个用于Find_Click。但似乎不对。 因为我用2个线程编写了控制台应用程序,但结果没有改变。
javaAccessBridge = Jab.Instance;
public void InitLib()
{
javaAccessBridge.Init();
}
public void LaunchApp()
{
using (JavaApplication app = new JavaApplication())
{
JavaApplicationContext context = new JavaApplicationContext()
{
ExecutableFile = @"c:\Dev\sq.jar"
};
app.Launch(context);
}
Thread init = new Thread(InitLib);
Thread app = new Thread(LaunchApp);
init.Start();
app.Start();
Thread.Sleep(5000);
// still return 0
javaAccessBridge.EnumJvms().Count;