--- old/modules/fxpackager/src/main/native/library/common/JavaVirtualMachine.cpp 2015-03-30 15:11:25.000000000 -0600 +++ new/modules/fxpackager/src/main/native/library/common/JavaVirtualMachine.cpp 2015-03-30 15:11:25.000000000 -0600 @@ -48,6 +48,23 @@ #include +bool RunVM() { + bool result = false; + JavaVirtualMachine javavm; + + if (javavm.StartJVM() == true) { + result = true; + javavm.ShutdownJVM(); + } + else { + Platform& platform = Platform::GetInstance(); + platform.ShowMessage(_T("Failed to launch JVM\n")); + } + + return result; +} + + // Private typedef for function pointer casting #ifndef USE_JLI_LAUNCH #define LAUNCH_FUNC "JNI_CreateJavaVM" @@ -200,10 +217,6 @@ } } - void AppendValue(const TString Key, TString Value) { - AppendValue(Key, Value, NULL); - } - void AppendValue(const TString Key, TString Value, void* Extra) { JavaOptionItem item; item.name = Key; @@ -212,22 +225,29 @@ FItems.push_back(item); } - void AppendValues(TOrderedMap Values) { - std::list orderedKeys = Helpers::GetOrderedKeysFromMap(Values); - - for (std::list::const_iterator iterator = orderedKeys.begin(); iterator != orderedKeys.end(); iterator++) { + void AppendValue(const TString Key, TString Value) { + AppendValue(Key, Value, NULL); + } + + void AppendValues(OrderedMap Values) { + std::vector orderedKeys = Values.GetKeys(); + + for (std::vector::const_iterator iterator = orderedKeys.begin(); iterator != orderedKeys.end(); iterator++) { TString name = *iterator; - TValueIndex value = Values[name]; - AppendValue(name, value.value); + TString value; + + if (Values.GetValue(name, value) == true) { + AppendValue(name, value); + } } } - + void ReplaceValue(const TString Key, TString Value) { for (std::list::iterator iterator = FItems.begin(); iterator != FItems.end(); iterator++) { - + TString lkey = iterator->name; - + if (lkey == Key) { JavaOptionItem item = *iterator; item.value = Value; @@ -244,7 +264,7 @@ memset(FOptions, 0, sizeof(JavaVMOption) * FItems.size()); Macros& macros = Macros::GetInstance(); unsigned int index = 0; - + for (std::list::const_iterator iterator = FItems.begin(); iterator != FItems.end(); iterator++) { TString key = iterator->name; @@ -265,7 +285,7 @@ std::list ToList() { std::list result; Macros& macros = Macros::GetInstance(); - + for (std::list::const_iterator iterator = FItems.begin(); iterator != FItems.end(); iterator++) { TString key = iterator->name; @@ -286,34 +306,38 @@ // jvmuserargs can have a trailing equals in the key. This needs to be removed to use // other parts of the launcher. -TOrderedMap RemoveTrailingEquals(TOrderedMap Map) { - TOrderedMap result; +OrderedMap RemoveTrailingEquals(OrderedMap Map) { + OrderedMap result; + + std::vector keys = Map.GetKeys(); + + for (size_t index = 0; index < keys.size(); index++) { + TString name = keys[index]; + TString value; + + if (Map.GetValue(name, value) == true) { + // If the last character of the key is an equals, then remove it. If there is no + // equals then combine the two as a key. + TString::iterator i = name.end(); + i--; - for (TOrderedMap::const_iterator iterator = Map.begin(); iterator != Map.end(); iterator++) { - TString name = iterator->first; - TValueIndex value = iterator->second; - - // If the last character of the key is an equals, then remove it. If there is no - // equals then combine the two as a key. - TString::iterator i = name.end(); - i--; - - if (*i == '=') { - name = name.substr(0, name.size() - 1); - } - else { - i = value.value.begin(); - if (*i == '=') { - value.value = value.value.substr(1, value.value.size() - 1); + name = name.substr(0, name.size() - 1); } else { - name = name + value.value; - value.value = _T(""); + i = value.begin(); + + if (*i == '=') { + value = value.substr(1, value.size() - 1); + } + else { + name = name + value; + value = _T(""); + } } - } - result.insert(TOrderedMap::value_type(name, value)); + result.Append(name, value); + } } return result; @@ -344,7 +368,7 @@ options.AppendValue(_T("-Dapp.preferences.id"), package.GetAppID()); options.AppendValues(package.GetJVMArgs()); options.AppendValues(RemoveTrailingEquals(package.GetJVMUserArgs())); - + #ifdef DEBUG if (package.Debugging() == dsJava) { options.AppendValue(_T("-Xdebug"), _T("")); @@ -382,7 +406,7 @@ JavaLibrary javaLibrary; javaLibrary.AddDependencies(platform.FilterOutRuntimeDependenciesForPlatform(platform.GetLibraryImports(package.GetJVMLibraryFileName()))); javaLibrary.Load(package.GetJVMLibraryFileName()); - + #ifndef USE_JLI_LAUNCH if (package.HasSplashScreen() == true) { options.AppendValue(TString(_T("-splash:")) + package.GetSplashScreenFileName(), _T("")); @@ -402,14 +426,14 @@ JavaStaticMethod mainMethod = mainClass.GetStaticMethod(_T("main"), _T("([Ljava/lang/String;)V")); std::list appargs = package.GetArgs(); JavaStringArray largs(FEnv, appargs); - + package.FreeBootFields(); - + mainMethod.CallVoidMethod(1, largs.GetData()); return true; } catch (JavaException& exception) { - platform.ShowMessage(PlatformString(exception.what()).toString()); + platform.ShowMessage(exception.GetMessage()); return false; } } @@ -446,7 +470,7 @@ std::list largs = package.GetArgs(); vmargs.splice(vmargs.end(), largs, largs.begin(), largs.end()); size_t argc = vmargs.size(); - DynamicBuffer argv(argc+1); + DynamicBuffer argv(argc + 1); unsigned int index = 0; for (std::list::const_iterator iterator = vmargs.begin(); @@ -463,11 +487,13 @@ argv[argc] = NULL; // On Mac we can only free the boot fields if the calling thread is not the main thread. -#ifdef MAC + #ifdef MAC if (platform.IsMainThread() == false) { package.FreeBootFields(); } -#endif //MAC + #else + package.FreeBootFields(); + #endif //MAC if (javaLibrary.JavaVMCreate(argc, argv.GetData()) == true) { return true;