diff --git a/Examples/java/callback/.cvsignore b/Examples/java/callback/.cvsignore new file mode 100644 index 000000000..48f246378 --- /dev/null +++ b/Examples/java/callback/.cvsignore @@ -0,0 +1,13 @@ +*.class +*.java +*_wrap.c +*_wrap.cxx +*.dll +*.dsw +*.exp +*.lib +*.ncb +*.opt +*.plg +Release +Debug diff --git a/Examples/java/callback/Makefile b/Examples/java/callback/Makefile new file mode 100644 index 000000000..69fb4e670 --- /dev/null +++ b/Examples/java/callback/Makefile @@ -0,0 +1,18 @@ +TOP = ../.. +SWIG = $(TOP)/../swig +CXXSRCS = example.cxx +TARGET = example +INTERFACE = example.i +SWIGOPT = + +all:: java + +java:: + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' java_cpp + javac *.java + +clean:: + $(MAKE) -f $(TOP)/Makefile java_clean + +check: all diff --git a/Examples/java/callback/example.cxx b/Examples/java/callback/example.cxx new file mode 100644 index 000000000..450d75608 --- /dev/null +++ b/Examples/java/callback/example.cxx @@ -0,0 +1,4 @@ +/* File : example.cxx */ + +#include "example.h" + diff --git a/Examples/java/callback/example.h b/Examples/java/callback/example.h new file mode 100644 index 000000000..292627748 --- /dev/null +++ b/Examples/java/callback/example.h @@ -0,0 +1,23 @@ +/* File : example.h */ + +#include +#include + +class Callback { +public: + virtual ~Callback() { std::cout << "Callback::~Callback()" << std:: endl; } + virtual void run() { std::cout << "Callback::run()" << std::endl; } +}; + + +class Caller { +private: + Callback *_callback; +public: + Caller(): _callback(0) {} + ~Caller() { delCallback(); } + void delCallback() { _callback = 0; } + void setCallback(Callback *cb) { delCallback(); _callback = cb; } + void call() { if (_callback) _callback->run(); } +}; + diff --git a/Examples/java/callback/example.i b/Examples/java/callback/example.i new file mode 100644 index 000000000..438ec6771 --- /dev/null +++ b/Examples/java/callback/example.i @@ -0,0 +1,15 @@ +/* File : example.i */ +%module(directors="1") example +%{ +#include "example.h" +%} + +// %include "typemaps.i" +// %include "std_vector.i" +%include "std_string.i" + +/* turn on director wrapping Callback */ +%feature("director") Callback; + +%include "example.h" + diff --git a/Examples/java/callback/index.html b/Examples/java/callback/index.html new file mode 100644 index 000000000..1d890f888 --- /dev/null +++ b/Examples/java/callback/index.html @@ -0,0 +1,29 @@ + + +SWIG:Examples:java:callback + + + + + +SWIG/Examples/python/extend/ +
+ +

Implementing C++ callbacks in Java

+ +$Header$
+ +

+This example illustrates how to use directors to implement C++ callbacks in Java. +

+

+Please note that unlike Python, Java does not have an equivalent concept of +weak references, so the program has to manually clean up after objects. The +implication of this is that the Caller class cannot claim +ownership of the Callback object in Caller.setCallback() +and delete it. +

+ +
+ +