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

90
7

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 на libjawt, libmawt, libawt я получаю следующий вывод:

test main  
Finally
Done

Я очень озадачен, почему второй println (по-видимому) не выполняется. Я попытался создать другие типы объектов вместо Frame и не видел, чтобы проблема возникла. Аналогично, я пробовал различные типы объектов awt и всегда видел тот же результат. Для справки Я запускаю 64bit centos с java 1.7.0_51.

спросил(а) 2014-12-10T18:34:00+03:00 5 лет, 10 месяцев назад
0
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема