Текущая спецификация JNI явно заявляет, что создание нескольких виртуальных машин в одном процессе не поддерживается , и это фактически утверждается в исходном коде HotSpot .
Даже если ваша dll вызывает JNI_CreateJavaVM
только один раз, это не означает, что это самый первый вызов в течение всего процесса. Фактически, JNI_CreateJavaVM
сначала вызывается java.exe
или другой пусковой установкой вашей IDE (idea.exe
, eclipse.exe
, netbeans.exe
и т. Д.).
Поэтому вместо того, чтобы создавать Java VM вслепую , A.dll
должен проверить сначала, если JVM уже существует в текущем процессе, вызвав JNI_GetCreatedJavaVMs . Если функция возвращает непустой массив, используйте GetEnv или AttachCurrentThread , чтобы получить JNIEnv*
для существующей виртуальной машины, иначе создайте новую виртуальную машину.
Только что понял:
def long_string():
"""
Returns a string which is wider than the recommended PEP8 linewidth
>>> print long_string()
01234567890123456789012345678901234567890123456789012345678901234567890\
12345678901234567890123456789
"""
return '0123456789' * 10
Надеюсь, что кто-то поможет.
Как было предложено davitenio и qris, я бы рекомендовал использовать директиву #doctest: +ELLIPSIS
, как это.
>>> from test.test_ppp import MockForm
>>> form = MockForm(mock_file='no-errors.xlsx')
>>> form.get_languages(settings_default='English', survey_header=
... form.metadata['raw_data']['survey'][0]) #doctest: +ELLIPSIS
['Ateso', 'English', 'Luganda', ... 'Runyoro-Rutoro']
res = long_string(); print res[:60]
, за которым следуют первые 60 символов и т. д. – Martijn Pieters♦ 15 November 2012 в 12:32012345678901234567...0123456789
в качестве ожидаемого результата. – davitenio 5 December 2013 в 14:39# doctest: +ELLIPSIS
в конец строки кода, которая выводит результат. – qris 9 April 2015 в 10:18