summaryrefslogtreecommitdiff
path: root/sj2
diff options
context:
space:
mode:
authorKurt Zenker <kz@openoffice.org>2004-03-25 13:56:11 +0000
committerKurt Zenker <kz@openoffice.org>2004-03-25 13:56:11 +0000
commit37f35814d03c6147736713fa1404ddba68d5544e (patch)
tree2f564def8e9de7b9612d7ab44398d4a35c27e7b8 /sj2
parent6cfd9a33f4923e624635c99e45e5f43e3ada3e98 (diff)
INTEGRATION: CWS jl3 (1.15.32); FILE MERGED
2004/02/17 11:57:57 jl 1.15.32.3: #111907# 2004/02/09 13:42:47 jl 1.15.32.2: RESYNC: (1.15-1.17); FILE MERGED 2003/11/20 16:40:04 jl 1.15.32.1: #111907# replace TKTThreadAttach by jvmaccess::VirtualMachine, directory source/java is now empty
Diffstat (limited to 'sj2')
-rw-r--r--sj2/source/jscpp/sjapplet_impl.cxx382
1 files changed, 243 insertions, 139 deletions
diff --git a/sj2/source/jscpp/sjapplet_impl.cxx b/sj2/source/jscpp/sjapplet_impl.cxx
index 7f1caad648..9fe178650b 100644
--- a/sj2/source/jscpp/sjapplet_impl.cxx
+++ b/sj2/source/jscpp/sjapplet_impl.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: sjapplet_impl.cxx,v $
*
- * $Revision: 1.17 $
+ * $Revision: 1.18 $
*
- * last change: $Author: vg $ $Date: 2003-12-17 20:37:09 $
+ * last change: $Author: kz $ $Date: 2004-03-25 14:56:11 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -78,25 +78,22 @@
#include <vcl/wrkwin.hxx>
#include <vcl/syschild.hxx>
#include <vcl/sysdata.hxx>
+#include <com/sun/star/java/XJavaVM.hpp>
-#ifdef SOLAR_JAVA
-#include <jnihelp.hxx>
-#endif // SOLAR_JAVA
-
-using namespace ::rtl;
using namespace ::osl;
-#ifdef SOLAR_JAVA
-using namespace ::sj2;
-#endif // SOLAR_JAVA
using namespace ::utl;
-
#ifdef SOLAR_JAVA
using namespace ::com::sun::star::java;
#endif // SOLAR_JAVA
+
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::uno;
+
+#define OUSTR( x ) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( x ))
+
#ifdef SOLAR_JAVA
+
static void testJavaException(JNIEnv * pEnv) throw(com::sun::star::uno::RuntimeException)
{
jthrowable jtThrowable = pEnv->ExceptionOccurred();
@@ -111,10 +108,10 @@ static void testJavaException(JNIEnv * pEnv) throw(com::sun::star::uno::Runtime
jstring jsMessage = (jstring)pEnv->CallObjectMethod(jtThrowable, jmThrowable_getMessage);
- OUString ouMessage;
+ rtl::OUString ouMessage;
if(jsMessage) {
const jchar * jcMessage = pEnv->GetStringChars(jsMessage, NULL);
- ouMessage = OUString(jcMessage);
+ ouMessage = rtl::OUString(jcMessage);
pEnv->ReleaseStringChars(jsMessage, jcMessage);
}
@@ -124,7 +121,7 @@ static void testJavaException(JNIEnv * pEnv) throw(com::sun::star::uno::Runtime
#else // !SOLAR_JAVA
static void throwException() throw(com::sun::star::uno::RuntimeException)
{
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("Java applets not supported.")), Reference<XInterface>());
+ throw RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Java applets not supported.")), Reference<XInterface>());
}
#endif
@@ -226,9 +223,10 @@ _joWindow = 0;
}
#endif // SOLAR_JAVA
+
#ifdef SOLAR_JAVA
SjApplet2_Impl::SjApplet2_Impl() throw(com::sun::star::uno::RuntimeException)
-: _pJVM(NULL),
+ :
_joAppletExecutionContext(0),
_jcAppletExecutionContext(0)
@@ -238,18 +236,29 @@ SjApplet2_Impl::SjApplet2_Impl() throw(com::sun::star::uno::RuntimeException)
{}
#endif
-SjApplet2_Impl::~SjApplet2_Impl() throw() {
-#ifdef SOLAR_JAVA
-if (_joAppletExecutionContext) {
- TKTThreadAttach jenv(_pJVM, _xJavaThreadRegister_11.get());
-
- _pEmbeddedWindow->dispose(jenv.pEnv);
- delete _pEmbeddedWindow;
- jenv.pEnv->DeleteGlobalRef(_joAppletExecutionContext);
- jenv.pEnv->DeleteGlobalRef(_jcAppletExecutionContext);
+SjApplet2_Impl::~SjApplet2_Impl() throw()
+{
+#ifdef SOLAR_JAVA
+ if (_joAppletExecutionContext)
+ {
+ try
+ {
+ if ( ! _virtualMachine.is())
+ return;
+ jvmaccess::VirtualMachine::AttachGuard vmAttachGuard(_virtualMachine);
+ JNIEnv * pEnv = vmAttachGuard.getEnvironment();
+ _pEmbeddedWindow->dispose(pEnv);
+ delete _pEmbeddedWindow;
+
+ pEnv->DeleteGlobalRef(_joAppletExecutionContext);
+ pEnv->DeleteGlobalRef(_jcAppletExecutionContext);
+ }
+ catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
+ {
+ }
+#endif
}
-#endif
}
void SjApplet2_Impl::init(Window * pParentWin,
@@ -263,16 +272,16 @@ void SjApplet2_Impl::init(Window * pParentWin,
// Java URL erzeugen
- OUString url = rDocBase.GetMainURL(INetURLObject::DECODE_TO_IURI);
+ rtl::OUString url = rDocBase.GetMainURL(INetURLObject::DECODE_TO_IURI);
if(!url.getLength())
- url = OUString(RTL_CONSTASCII_USTRINGPARAM("file:///"));
+ url = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("file:///"));
if (url.getLength()) {
//WorkAround, weil Java mit dem | nicht zurecht kommt
if(rDocBase.GetProtocol() == INET_PROT_FILE && url.pData->buffer[9] == INET_ENC_DELIM_TOKEN) {
- OUString tmp = url.copy(0, 9);
- tmp += OUString(INET_DELIM_TOKEN);
+ rtl::OUString tmp = url.copy(0, 9);
+ tmp += rtl::OUString(INET_DELIM_TOKEN);
tmp += url.copy(10);
url = tmp;
@@ -281,84 +290,88 @@ void SjApplet2_Impl::init(Window * pParentWin,
#if OSL_DEBUG_LEVEL > 1
- OString tmp = OUStringToOString(url, RTL_TEXTENCODING_ASCII_US);
+ rtl::OString tmp = rtl::OUStringToOString(url, RTL_TEXTENCODING_ASCII_US);
OSL_TRACE("SjApplet2_Impl::init - mainUrl: %s\n", tmp.getStr());
#endif
- _xJavaVM = Reference<XJavaVM>(smgr->createInstance(OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.java.JavaVirtualMachine"))), UNO_QUERY);
- _xJavaThreadRegister_11 = Reference<XJavaThreadRegister_11>(_xJavaVM, UNO_QUERY);
-
- Sequence<sal_Int8> processID(16);
+ Reference<XJavaVM>_xJavaVM = Reference<XJavaVM>(smgr->createInstance(
+ OUSTR("com.sun.star.java.JavaVirtualMachine")), UNO_QUERY);
+ Sequence<sal_Int8> processID(17);
rtl_getGlobalProcessId((sal_uInt8 *)processID.getArray());
- Any aVMPtr = _xJavaVM->getJavaVM(processID);
- if( sizeof(_pJVM) == sizeof(sal_Int32))
- {
- // 32 bit system
- sal_Int32 nP = 0;
- aVMPtr >>= nP;
- _pJVM = (JavaVM*)nP;
- }
- else if(sizeof(_pJVM) == sizeof(sal_Int64))
+ processID[16] = 0;
+
+ OSL_ENSURE(sizeof (sal_Int64)
+ >= sizeof (jvmaccess::VirtualMachine *),
+ "Pointer cannot be represented as sal_Int64");
+ sal_Int64 nPointer = reinterpret_cast< sal_Int64 >(
+ static_cast< jvmaccess::VirtualMachine * >(0));
+ _xJavaVM->getJavaVM(processID) >>= nPointer;
+ _virtualMachine = reinterpret_cast< jvmaccess::VirtualMachine * >(nPointer);
+ if (!_virtualMachine.is())
+ return;
+
+ try
{
- // 64 bit system
- sal_Int64 nP = 0;
- aVMPtr >>= nP;
- _pJVM = (JavaVM*)nP;
- }
+ jvmaccess::VirtualMachine::AttachGuard vmAttachGuard(_virtualMachine);
- if(!_pJVM) // did we get a vm?
- throw RuntimeException(OUString(RTL_CONSTASCII_USTRINGPARAM("sjapplet_impl.cxx: couldn't get a java vm")), Reference<XInterface>());
+ JNIEnv * pEnv = vmAttachGuard.getEnvironment();
- TKTThreadAttach jenv(_pJVM, _xJavaThreadRegister_11.get());
+ _jcAppletExecutionContext = pEnv->FindClass("stardiv/applet/AppletExecutionContext"); testJavaException(pEnv);
+ _jcAppletExecutionContext = (jclass) pEnv->NewGlobalRef(_jcAppletExecutionContext ); testJavaException(pEnv);
- _jcAppletExecutionContext = jenv.pEnv->FindClass("stardiv/applet/AppletExecutionContext"); testJavaException(jenv.pEnv);
- _jcAppletExecutionContext = (jclass)jenv.pEnv->NewGlobalRef(_jcAppletExecutionContext ); testJavaException(jenv.pEnv);
+ jclass jcURL = pEnv->FindClass("java/net/URL"); testJavaException(pEnv);
+ jmethodID jmURL_rinit = pEnv->GetMethodID(jcURL, "<init>", "(Ljava/lang/String;)V"); testJavaException(pEnv);
+ jobject joDocBase = pEnv->AllocObject(jcURL); testJavaException(pEnv);
+ jstring jsURL = pEnv->NewString(url.getStr(), url.getLength()); testJavaException(pEnv);
+ pEnv->CallVoidMethod(joDocBase, jmURL_rinit, jsURL); testJavaException(pEnv);
- jclass jcURL = jenv.pEnv->FindClass("java/net/URL"); testJavaException(jenv.pEnv);
- jmethodID jmURL_rinit = jenv.pEnv->GetMethodID(jcURL, "<init>", "(Ljava/lang/String;)V"); testJavaException(jenv.pEnv);
- jobject joDocBase = jenv.pEnv->AllocObject(jcURL); testJavaException(jenv.pEnv);
- jstring jsURL = jenv.pEnv->NewString(url.getStr(), url.getLength()); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(joDocBase, jmURL_rinit, jsURL); testJavaException(jenv.pEnv);
+ jclass jcHashtable = pEnv->FindClass("java/util/Hashtable"); testJavaException(pEnv);
+ jmethodID jmHashtable_rinit = pEnv->GetMethodID(jcHashtable, "<init>", "()V"); testJavaException(pEnv);
+ jmethodID jmHashtable_put = pEnv->GetMethodID(jcHashtable, "put",
+ "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); testJavaException(pEnv);
+ jobject joParameters = pEnv->AllocObject(jcHashtable); testJavaException(pEnv);
+ pEnv->CallVoidMethod(joParameters, jmHashtable_rinit); testJavaException(pEnv);
- jclass jcHashtable = jenv.pEnv->FindClass("java/util/Hashtable"); testJavaException(jenv.pEnv);
- jmethodID jmHashtable_rinit = jenv.pEnv->GetMethodID(jcHashtable, "<init>", "()V"); testJavaException(jenv.pEnv);
- jmethodID jmHashtable_put = jenv.pEnv->GetMethodID(jcHashtable, "put",
- "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); testJavaException(jenv.pEnv);
- jobject joParameters = jenv.pEnv->AllocObject(jcHashtable); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(joParameters, jmHashtable_rinit); testJavaException(jenv.pEnv);
-
- for(sal_Int64 i = 0; i < rCmdList.Count(); ++i) {
- const SvCommand & rCmd = rCmdList[i];
- String aCmd = rCmd.GetCommand();
- String aLoweredCmd = aCmd.ToLowerAscii();
+ for(sal_Int64 i = 0; i < rCmdList.Count(); ++i) {
+ const SvCommand & rCmd = rCmdList[i];
+ String aCmd = rCmd.GetCommand();
+ String aLoweredCmd = aCmd.ToLowerAscii();
#if OSL_DEBUG_LEVEL > 1
- OUString command = aCmd;
- OUString value = rCmd.GetArgument();
- OString cmd_tmp = OUStringToOString(command, RTL_TEXTENCODING_ASCII_US);
- OString value_tmp = OUStringToOString(value, RTL_TEXTENCODING_ASCII_US);
- OSL_TRACE("command: %s=%s", cmd_tmp.getStr(), value_tmp.getStr());
+ rtl::OUString command = aCmd;
+ rtl::OUString value = rCmd.GetArgument();
+ rtl::OString cmd_tmp = rtl::OUStringToOString(command, RTL_TEXTENCODING_ASCII_US);
+ rtl::OString value_tmp = rtl::OUStringToOString(value, RTL_TEXTENCODING_ASCII_US);
+ OSL_TRACE("command: %s=%s", cmd_tmp.getStr(), value_tmp.getStr());
#endif
+ jstring jsCommand = pEnv->NewString(aLoweredCmd.GetBuffer(), aLoweredCmd.Len()); testJavaException(pEnv);
+ jstring jsArg = pEnv->NewString(rCmd.GetArgument().GetBuffer(), rCmd.GetArgument().Len()); testJavaException(pEnv);
+ pEnv->CallObjectMethod(joParameters, jmHashtable_put, jsCommand, jsArg); testJavaException(pEnv);
+ }
- jstring jsCommand = jenv.pEnv->NewString(aLoweredCmd.GetBuffer(), aLoweredCmd.Len()); testJavaException(jenv.pEnv);
- jstring jsArg = jenv.pEnv->NewString(rCmd.GetArgument().GetBuffer(), rCmd.GetArgument().Len()); testJavaException(jenv.pEnv);
- jenv.pEnv->CallObjectMethod(joParameters, jmHashtable_put, jsCommand, jsArg); testJavaException(jenv.pEnv);
- }
+ SystemEnvData const * pEnvData = ((SystemChildWindow *)pParentWin)->GetSystemData();
+ _pEmbeddedWindow = new EmbeddedWindow(pEnv, pEnvData);
- SystemEnvData const * pEnvData = ((SystemChildWindow *)pParentWin)->GetSystemData();
- _pEmbeddedWindow = new EmbeddedWindow(jenv.pEnv, pEnvData);
+ jmethodID jmAppletExecutionContext_rinit = pEnv->GetMethodID(_jcAppletExecutionContext, "<init>",
+ "(Ljava/net/URL;Ljava/util/Hashtable;Ljava/awt/Container;J)V"); testJavaException(pEnv);
+ jmethodID jmAppletExecutionContext_init = pEnv->GetMethodID(_jcAppletExecutionContext, "init", "()V"); testJavaException(pEnv);
+ jmethodID jmAppletExecutionContext_startUp = pEnv->GetMethodID(_jcAppletExecutionContext, "startUp", "()V"); testJavaException(pEnv);
- jmethodID jmAppletExecutionContext_rinit = jenv.pEnv->GetMethodID(_jcAppletExecutionContext, "<init>",
- "(Ljava/net/URL;Ljava/util/Hashtable;Ljava/awt/Container;J)V"); testJavaException(jenv.pEnv);
- jmethodID jmAppletExecutionContext_init = jenv.pEnv->GetMethodID(_jcAppletExecutionContext, "init", "()V"); testJavaException(jenv.pEnv);
- jmethodID jmAppletExecutionContext_startUp = jenv.pEnv->GetMethodID(_jcAppletExecutionContext, "startUp", "()V"); testJavaException(jenv.pEnv);
+ _joAppletExecutionContext = pEnv->AllocObject(_jcAppletExecutionContext); testJavaException(pEnv);
+ _joAppletExecutionContext = pEnv->NewGlobalRef(_joAppletExecutionContext); testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_rinit,
+ joDocBase, joParameters, _pEmbeddedWindow->_joWindow, (jlong)0); testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_init); testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_startUp); testJavaException(pEnv);
+
+ }
+ catch(jvmaccess::VirtualMachine::AttachGuard::CreationException & )
+ {
+ throw RuntimeException(
+ OUSTR("sjapplet_impl.cxx: Could not create jvmaccess::"
+ "VirtualMachine::AttachGuard!"), 0);
+ }
- _joAppletExecutionContext = jenv.pEnv->AllocObject(_jcAppletExecutionContext); testJavaException(jenv.pEnv);
- _joAppletExecutionContext = jenv.pEnv->NewGlobalRef(_joAppletExecutionContext); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_rinit,
- joDocBase, joParameters, _pEmbeddedWindow->_joWindow, (jlong)0); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_init); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_startUp); testJavaException(jenv.pEnv);
#else // !SOLAR_JAVA
throwException();
#endif
@@ -366,14 +379,31 @@ void SjApplet2_Impl::init(Window * pParentWin,
void SjApplet2_Impl::setSize(const Size & rSize) throw(com::sun::star::uno::RuntimeException)
{
-#ifdef SOLAR_JAVA
- TKTThreadAttach jenv(_pJVM, _xJavaThreadRegister_11.get());
-
- _pParentWin->SetSizePixel(rSize);
- jmethodID jmAppletExecutionContext_resize = jenv.pEnv->GetMethodID(_jcAppletExecutionContext, "appletResize", "(II)V"); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_resize, (jint)rSize.Width(),
- (jint)rSize.Height()); testJavaException(jenv.pEnv);
+#ifdef SOLAR_JAVA
+ try
+ {
+ if ( ! _virtualMachine.is())
+ return;
+ jvmaccess::VirtualMachine::AttachGuard vmAttachGuard(_virtualMachine);
+ JNIEnv * pEnv = vmAttachGuard.getEnvironment();
+
+ _pParentWin->SetSizePixel(rSize);
+
+ jmethodID jmAppletExecutionContext_resize = pEnv->GetMethodID(
+ _jcAppletExecutionContext, "appletResize", "(II)V");
+ testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext,
+ jmAppletExecutionContext_resize, (jint)rSize.Width(),
+ (jint)rSize.Height());
+ testJavaException(pEnv);
+ }
+ catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
+ {
+ throw RuntimeException(
+ OUSTR("SjApplet2_Impl::setSize, Could not create jvmaccess::"
+ "VirtualMachine::AttachGuard!"), 0);
+ }
#else // !SOLAR_JAVA
throwException();
#endif
@@ -382,10 +412,24 @@ void SjApplet2_Impl::setSize(const Size & rSize) throw(com::sun::star::uno::Runt
void SjApplet2_Impl::restart() throw(com::sun::star::uno::RuntimeException)
{
#ifdef SOLAR_JAVA
- TKTThreadAttach jenv(_pJVM, _xJavaThreadRegister_11.get());
-
- jmethodID jmAppletExecutionContext_restart = jenv.pEnv->GetMethodID(_jcAppletExecutionContext, "restart", "()V"); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_restart); testJavaException(jenv.pEnv);
+ try
+ {
+ if ( ! _virtualMachine.is())
+ return;
+ jvmaccess::VirtualMachine::AttachGuard vmAttachGuard(_virtualMachine);
+ JNIEnv * pEnv = vmAttachGuard.getEnvironment();
+ jmethodID jmAppletExecutionContext_restart = pEnv->GetMethodID(
+ _jcAppletExecutionContext, "restart", "()V");
+ testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_restart);
+ testJavaException(pEnv);
+ }
+ catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
+ {
+ throw RuntimeException(
+ OUSTR("SjApplet2_Impl::restart, Could not create jvmaccess::"
+ "VirtualMachine::AttachGuard!"), 0);
+ }
#else // !SOLAR_JAVA
throwException();
#endif
@@ -394,10 +438,24 @@ void SjApplet2_Impl::restart() throw(com::sun::star::uno::RuntimeException)
void SjApplet2_Impl::reload() throw(com::sun::star::uno::RuntimeException)
{
#ifdef SOLAR_JAVA
- TKTThreadAttach jenv(_pJVM, _xJavaThreadRegister_11.get());
-
- jmethodID jmAppletExecutionContext_reload = jenv.pEnv->GetMethodID(_jcAppletExecutionContext, "reload", "()V"); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_reload); testJavaException(jenv.pEnv);
+ try
+ {
+ if ( ! _virtualMachine.is())
+ return;
+ jvmaccess::VirtualMachine::AttachGuard vmAttachGuard(_virtualMachine);
+ JNIEnv * pEnv = vmAttachGuard.getEnvironment();
+ jmethodID jmAppletExecutionContext_reload = pEnv->GetMethodID(
+ _jcAppletExecutionContext, "reload", "()V");
+ testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_reload);
+ testJavaException(pEnv);
+ }
+ catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
+ {
+ throw RuntimeException(
+ OUSTR("SjApplet2_Impl::reload, Could not create jvmaccess::"
+ "VirtualMachine::AttachGuard!"), 0);
+ }
#else // !SOLAR_JAVA
throwException();
#endif
@@ -406,10 +464,24 @@ void SjApplet2_Impl::reload() throw(com::sun::star::uno::RuntimeException)
void SjApplet2_Impl::start() throw(com::sun::star::uno::RuntimeException)
{
#ifdef SOLAR_JAVA
- TKTThreadAttach jenv(_pJVM, _xJavaThreadRegister_11.get());
-
- jmethodID jmAppletExecutionContext_sendStart = jenv.pEnv->GetMethodID(_jcAppletExecutionContext, "sendStart", "()V"); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_sendStart); testJavaException(jenv.pEnv);
+ try
+ {
+ if ( ! _virtualMachine.is())
+ return;
+ jvmaccess::VirtualMachine::AttachGuard vmAttachGuard(_virtualMachine);
+ JNIEnv * pEnv = vmAttachGuard.getEnvironment();
+ jmethodID jmAppletExecutionContext_sendStart = pEnv->GetMethodID(
+ _jcAppletExecutionContext, "sendStart", "()V");
+ testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_sendStart);
+ testJavaException(pEnv);
+ }
+ catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
+ {
+ throw RuntimeException(
+ OUSTR("SjApplet2_Impl::restart, Could not create jvmaccess::"
+ "VirtualMachine::AttachGuard!"), 0);
+ }
#else // !SOLAR_JAVA
throwException();
#endif
@@ -418,10 +490,24 @@ void SjApplet2_Impl::start() throw(com::sun::star::uno::RuntimeException)
void SjApplet2_Impl::stop() throw(com::sun::star::uno::RuntimeException)
{
#ifdef SOLAR_JAVA
- TKTThreadAttach jenv(_pJVM, _xJavaThreadRegister_11.get());
-
- jmethodID jmAppletExecutionContext_sendStop = jenv.pEnv->GetMethodID(_jcAppletExecutionContext, "sendStop", "()V"); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_sendStop); testJavaException(jenv.pEnv);
+ try
+ {
+ if ( ! _virtualMachine.is())
+ return;
+ jvmaccess::VirtualMachine::AttachGuard vmAttachGuard(_virtualMachine);
+ JNIEnv * pEnv = vmAttachGuard.getEnvironment();
+ jmethodID jmAppletExecutionContext_sendStop = pEnv->GetMethodID(
+ _jcAppletExecutionContext, "sendStop", "()V");
+ testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_sendStop);
+ testJavaException(pEnv);
+ }
+ catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
+ {
+ throw RuntimeException(
+ OUSTR("SjApplet2_Impl::restart, Could not create jvmaccess::"
+ "VirtualMachine::AttachGuard!"), 0);
+ }
#else // !SOLAR_JAVA
throwException();
#endif
@@ -430,35 +516,53 @@ void SjApplet2_Impl::stop() throw(com::sun::star::uno::RuntimeException)
void SjApplet2_Impl::close() throw(com::sun::star::uno::RuntimeException)
{
#ifdef SOLAR_JAVA
- TKTThreadAttach jenv(_pJVM, _xJavaThreadRegister_11.get());
-
- jmethodID jmAppletExecutionContext_shutdown = jenv.pEnv->GetMethodID(_jcAppletExecutionContext, "shutdown", "()V"); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_shutdown); testJavaException(jenv.pEnv);
-
- jmethodID jmWaitForDispose= jenv.pEnv->GetMethodID(_jcAppletExecutionContext,"waitForDispose","()V");
- testJavaException(jenv.pEnv);
- //blocks until the applet has destroyed itself and the container was disposed (stardiv.applet.AppletExecutionContext.dispose)
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmWaitForDispose);
-
- // now that the applet is disposed, we dispose the AppletExecutionContext, that will end the thread
- // which dispatches the applet methods, such as init, start, stop , destroy.
- jmethodID jmAppletExecutionContext_dispose= jenv.pEnv->GetMethodID(_jcAppletExecutionContext,
- "dispose", "()V"); testJavaException(jenv.pEnv);
- jenv.pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_dispose);
- testJavaException(jenv.pEnv);
-
- if( _pParentWin )
+ try
{
- WorkWindow* pAppWin = Application::GetAppWindow();
- if(pAppWin)
- {
- while(_pParentWin->GetChildCount())
+ if ( ! _virtualMachine.is())
+ return;
+ jvmaccess::VirtualMachine::AttachGuard vmAttachGuard(_virtualMachine);
+ JNIEnv * pEnv = vmAttachGuard.getEnvironment();
+
+ jmethodID jmAppletExecutionContext_shutdown = pEnv->GetMethodID(
+ _jcAppletExecutionContext, "shutdown", "()V");
+ testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_shutdown);
+ testJavaException(pEnv);
+
+ jmethodID jmWaitForDispose= pEnv->GetMethodID(
+ _jcAppletExecutionContext,"waitForDispose","()V");
+ testJavaException(pEnv);
+ //blocks until the applet has destroyed itself and the container was disposed
+ //(stardiv.applet.AppletExecutionContext.dispose)
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmWaitForDispose);
+
+ // now that the applet is disposed, we dispose the AppletExecutionContext, that will end the thread
+ // which dispatches the applet methods, such as init, start, stop , destroy.
+ jmethodID jmAppletExecutionContext_dispose= pEnv->GetMethodID(
+ _jcAppletExecutionContext,"dispose", "()V");
+ testJavaException(pEnv);
+ pEnv->CallVoidMethod(_joAppletExecutionContext, jmAppletExecutionContext_dispose);
+ testJavaException(pEnv);
+
+ if( _pParentWin )
+ {
+ WorkWindow* pAppWin = Application::GetAppWindow();
+ if(pAppWin)
{
- Window* pChild = _pParentWin->GetChild(0);
- pChild->Show( FALSE );
- pChild->SetParent( pAppWin );
+ while(_pParentWin->GetChildCount())
+ {
+ Window* pChild = _pParentWin->GetChild(0);
+ pChild->Show( FALSE );
+ pChild->SetParent( pAppWin );
+ }
}
- }
+ }
+ }
+ catch (jvmaccess::VirtualMachine::AttachGuard::CreationException &)
+ {
+ throw RuntimeException(
+ OUSTR("SjApplet2_Impl::close, Could not create jvmaccess::"
+ "VirtualMachine::AttachGuard!"), 0);
}
#else // !SOLAR_JAVA
throwException();