Код после создания объекта AWT, по-видимому, не выполняется

Test.java

import java.awt.Frame;

public class Test {
public static void main(String[] args) {
try {
System.out.println("test main");
Frame t = new Frame();
System.out.println("test main2");
} catch (Exception e) {
System.out.println("Catch");
}
finally {
System.out.println("Finally");
}
}
}

test.cc

JNIEnv *_VMEnvironment;
JavaVM *_VM;
jclass _JavaClass;

void init()
{
const int tCount = 1;
JavaVMInitArgs tArgs;
JavaVMOption tOptions[tCount];

tArgs.version = JNI_VERSION_1_6;
tArgs.nOptions = tCount;
std::string tPath = "-Djava.library.path=/usr/lib";

tOptions[0].optionString = const_cast<char*>(tPath.c_str());
tArgs.options = tOptions;
tArgs.ignoreUnrecognized = JNI_FALSE;

JNI_CreateJavaVM(&_VM, (void**)&_VMEnvironment, &tArgs);
}

void start()
{
jmethodID tMainMethod;
_JavaClass = _VMEnvironment->FindClass("Test");
tMainMethod = _VMEnvironment->GetStaticMethodID(
_JavaClass, "main", "([Ljava/lang/String;)V");
_VMEnvironment->CallStaticVoidMethod(_JavaClass, tMainMethod, nullptr);

std::cout << "Done" << std::endl;
}

int main()
{
init();
start();
return 0;
}

Если я ссылаюсь против libverify, libjava, libjvm Я получаю следующий вывод:

test main
test main2
Finally
Done

Однако, если я также ссылку против libjawt, libmawt, libawt Я получаю следующий вывод:

test main
Finally
Done

Я очень озадачен, почему второй println (по-видимому) не выполняется. Я попытался создать другие типы объектов вместо фрейма и не увидел, что проблема возникает. Точно так же я пробовал разные типы объектов AWT и всегда видел один и тот же результат. Для справки я использую 64-битные центы с Java 1.7.0_51.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]