@@ -9,6 +9,7 @@ Bridge API to connect with existing Java APIs.
9
9
### Other projects that might be helpful
10
10
11
11
* [ node-java-maven] ( https://github.com/joeferner/node-java-maven ) - manages your node-java classpath by using maven dependency management.
12
+ * [ ts-java] ( https://github.com/RedSeal-co/ts-java ) - Create TypeScript declaration files for Java packages.
12
13
13
14
## Installation
14
15
@@ -92,8 +93,8 @@ npm install --unsafe-perm java
92
93
Then create a file called ` test.js ` with the following contents
93
94
94
95
```
95
- var java = require('java');
96
- var javaLangSystem = java.import('java.lang.System');
96
+ const java = require('java');
97
+ const javaLangSystem = java.import('java.lang.System');
97
98
98
99
javaLangSystem.out.printlnSync('Hello World');
99
100
```
@@ -130,10 +131,10 @@ Then create the following module javaInit:
130
131
131
132
``` javascript
132
133
" use strict" ;
133
- var fs = require (" fs" );
134
- var java = require (" java" );
135
- var baseDir = " ./target/dependency" ;
136
- var dependencies = fs .readdirSync (baseDir);
134
+ const fs = require (" fs" );
135
+ const java = require (" java" );
136
+ const baseDir = " ./target/dependency" ;
137
+ const dependencies = fs .readdirSync (baseDir);
137
138
138
139
dependencies .forEach (function (dependency ){
139
140
java .classpath .push (baseDir + " /" + dependency);
@@ -151,8 +152,8 @@ and then in the consuming class write:
151
152
152
153
``` javascript
153
154
154
- var javaInit = require (' ./javaInit' );
155
- var java = javaInit .getJavaInstance ();
155
+ const javaInit = require (' ./javaInit' );
156
+ const java = javaInit .getJavaInstance ();
156
157
157
158
// your code goes here
158
159
```
@@ -162,11 +163,11 @@ var java = javaInit.getJavaInstance();
162
163
## Quick Examples
163
164
164
165
``` javascript
165
- var java = require (" java" );
166
+ const java = require (" java" );
166
167
java .classpath .push (" commons-lang3-3.1.jar" );
167
168
java .classpath .push (" commons-io.jar" );
168
169
169
- var list1 = java .newInstanceSync (" java.util.ArrayList" );
170
+ const list1 = java .newInstanceSync (" java.util.ArrayList" );
170
171
console .log (list1 .sizeSync ()); // 0
171
172
list1 .addSync (' item1' );
172
173
console .log (list1 .sizeSync ()); // 1
@@ -177,22 +178,22 @@ java.newInstance("java.util.ArrayList", function(err, list2) {
177
178
console .log (list2 .toStringSync ()); // [item1, item2]
178
179
});
179
180
180
- var ArrayList = java .import (' java.util.ArrayList' );
181
- var list3 = new ArrayList ();
181
+ const ArrayList = java .import (' java.util.ArrayList' );
182
+ const list3 = new ArrayList ();
182
183
list3 .addSync (' item1' );
183
184
list3 .equalsSync (list1); // true
184
185
```
185
186
186
187
### Create a char array
187
188
188
189
``` javascript
189
- var charArray = java .newArray (" char" , " hello world\n " .split (' ' ));
190
+ const charArray = java .newArray (" char" , " hello world\n " .split (' ' ));
190
191
```
191
192
192
193
### Create a byte array
193
194
194
195
``` javascript
195
- var byteArray = java .newArray (
196
+ const byteArray = java .newArray (
196
197
" byte" ,
197
198
" hello world\n "
198
199
.split (' ' )
@@ -207,7 +208,7 @@ a property off of the result called "longValue" which contains the un-truncated
207
208
If you are calling a method that takes a long you must create it using [ java.newInstance] ( #javaNewInstance ) .
208
209
209
210
``` javascript
210
- var javaLong = java .newInstanceSync (" java.lang.Long" , 5 );
211
+ const javaLong = java .newInstanceSync (" java.lang.Long" , 5 );
211
212
console .log (' Possibly truncated long value: ' + javaLong);
212
213
console .log (' Original long value (as a string): ' + javaLong .longValue );
213
214
java .callStaticMethodSync (" Test" , " staticMethodThatTakesALong" , javaLong);
@@ -236,7 +237,7 @@ As of release 0.4.5 it became possible to create async methods that return promi
236
237
Example:
237
238
238
239
``` javascript
239
- var java = require (" java" );
240
+ const java = require (" java" );
240
241
java .asyncOptions = {
241
242
asyncSuffix: undefined , // Don't generate node-style methods taking callbacks
242
243
syncSuffix: " " , // Sync methods use the base name(!!)
@@ -401,13 +402,13 @@ __Arguments__
401
402
402
403
__ Example__
403
404
404
- var Test = java.import('Test');
405
+ const Test = java.import('Test');
405
406
Test.someStaticMethodSync(5);
406
407
console.log(Test.someStaticField);
407
408
408
- var value1 = Test.NestedEnum.Value1;
409
+ const value1 = Test.NestedEnum.Value1;
409
410
410
- var test = new Test();
411
+ const test = new Test();
411
412
list.instanceMethodSync('item1');
412
413
413
414
## newInstance
@@ -428,7 +429,7 @@ __Arguments__
428
429
429
430
__ Example__
430
431
431
- var list = java.newInstanceSync("java.util.ArrayList");
432
+ const list = java.newInstanceSync("java.util.ArrayList");
432
433
433
434
java.newInstance("java.util.ArrayList", function(err, list) {
434
435
if(err) { console.error(err); return; }
@@ -450,7 +451,7 @@ __Arguments__
450
451
451
452
__ Example__
452
453
453
- var obj = java.newInstanceSync("my.package.SubClass");
454
+ const obj = java.newInstanceSync("my.package.SubClass");
454
455
455
456
if(java.instanceOf(obj, "my.package.SuperClass")) {
456
457
console.log("obj is an instance of SuperClass");
@@ -464,8 +465,7 @@ __Example__
464
465
465
466
** java.callStaticMethodSync(className, methodName, [ args...] ) : result**
466
467
467
- Calls a static method on the specified class. If you are using the sync method an exception will be throw if an error occurs,
468
- otherwise it will be the first argument in the callback.
468
+ Calls a static method on the specified class. If you are using the sync method an exception will be throw if an error occurs, otherwise it will be the first argument in the callback.
469
469
470
470
__ Arguments__
471
471
@@ -475,7 +475,7 @@ __Arguments__
475
475
476
476
__ Example__
477
477
478
- var result = java.callStaticMethodSync("com.nearinfinty.MyClass", "doSomething", 42, "test");
478
+ const result = java.callStaticMethodSync("com.nearinfinty.MyClass", "doSomething", 42, "test");
479
479
480
480
java.callStaticMethod("com.nearinfinty.MyClass", "doSomething", 42, "test", function(err, results) {
481
481
if(err) { console.error(err); return; }
@@ -501,11 +501,11 @@ __Arguments__
501
501
502
502
__ Example__
503
503
504
- var instance = java.newInstanceSync("com.nearinfinty.MyClass");
504
+ const instance = java.newInstanceSync("com.nearinfinty.MyClass");
505
505
506
- var result = java.callMethodSync("com.nearinfinty.MyClass", "doSomething", 42, "test");
506
+ const result = java.callMethodSync("com.nearinfinty.MyClass", "doSomething", 42, "test");
507
507
508
- java.callMethodSync (instance, "doSomething", 42, "test", function(err, results) {
508
+ java.callMethod (instance, "doSomething", 42, "test", function(err, results) {
509
509
if(err) { console.error(err); return; }
510
510
// results from doSomething
511
511
});
@@ -525,7 +525,7 @@ __Arguments__
525
525
526
526
__ Example__
527
527
528
- var data = java.getStaticFieldValue("com.nearinfinty.MyClass", "data");
528
+ const data = java.getStaticFieldValue("com.nearinfinty.MyClass", "data");
529
529
530
530
## setStaticFieldValue
531
531
@@ -560,7 +560,7 @@ __Arguments__
560
560
561
561
__ Example__
562
562
563
- var newArray = java.newArray("java.lang.String", ["item1", "item2", "item3"]);
563
+ const newArray = java.newArray("java.lang.String", ["item1", "item2", "item3"]);
564
564
565
565
## newByte
566
566
@@ -576,7 +576,7 @@ __Arguments__
576
576
577
577
__ Example__
578
578
579
- var b = java.newByte(12);
579
+ const b = java.newByte(12);
580
580
581
581
## newShort
582
582
@@ -592,7 +592,7 @@ __Arguments__
592
592
593
593
__ Example__
594
594
595
- var s = java.newShort(12);
595
+ const s = java.newShort(12);
596
596
597
597
## newLong
598
598
@@ -608,7 +608,7 @@ __Arguments__
608
608
609
609
__ Example__
610
610
611
- var s = java.newLong(12);
611
+ const s = java.newLong(12);
612
612
613
613
## newChar
614
614
@@ -624,7 +624,7 @@ __Arguments__
624
624
625
625
__ Example__
626
626
627
- var ch = java.newChar('a');
627
+ const ch = java.newChar('a');
628
628
629
629
## newDouble
630
630
@@ -640,7 +640,7 @@ __Arguments__
640
640
641
641
__ Example__
642
642
643
- var d = java.newDouble(3.14);
643
+ const d = java.newDouble(3.14);
644
644
645
645
## newFloat
646
646
@@ -656,7 +656,7 @@ __Arguments__
656
656
657
657
__ Example__
658
658
659
- var f = java.newFloat(3.14);
659
+ const f = java.newFloat(3.14);
660
660
661
661
## newProxy
662
662
@@ -676,14 +676,14 @@ __Arguments__
676
676
677
677
__ Example__
678
678
679
- var myProxy = java.newProxy('java.lang.Runnable', {
679
+ const myProxy = java.newProxy('java.lang.Runnable', {
680
680
run: function () {
681
681
// This is actually run on the v8 thread and not the new java thread
682
682
console.log("hello from thread");
683
683
}
684
684
});
685
685
686
- var thread = java.newInstanceSync("java.lang.Thread", myProxy);
686
+ const thread = java.newInstanceSync("java.lang.Thread", myProxy);
687
687
thread.start();
688
688
689
689
## isJvmCreated
@@ -742,7 +742,7 @@ __Arguments__
742
742
743
743
__ Example__
744
744
745
- var list = java.newInstanceSync("java.util.ArrayList");
745
+ const list = java.newInstanceSync("java.util.ArrayList");
746
746
list.addSync("item1");
747
747
list.add("item2", function(err, result) {
748
748
if(err) { console.error(err); return; }
@@ -761,9 +761,9 @@ field values.
761
761
762
762
__ Example__
763
763
764
- var list = java.newInstanceSync("com.nearinfinty.MyClass");
764
+ const list = java.newInstanceSync("com.nearinfinty.MyClass");
765
765
list.data = "test";
766
- var data = list.data;
766
+ const data = list.data;
767
767
768
768
## Getting the Full Method Signature
769
769
@@ -816,9 +816,9 @@ public class ShutdownHookHelper {
816
816
Compile ShutdownHookHelper and then use it as follows.
817
817
818
818
``` javascript
819
- var java = require (' ./' );
819
+ const java = require (' ./' );
820
820
java .classpath .push (' .' );
821
- var ShutdownHookHelper = java .import (' ShutdownHookHelper' );
821
+ const ShutdownHookHelper = java .import (' ShutdownHookHelper' );
822
822
823
823
ShutdownHookHelper .setShutdownHookSync (java .newProxy (' java.lang.Runnable' , {
824
824
run : function () {
@@ -839,12 +839,12 @@ When you call a Java method through node-java, any arguments (V8/JavaScript obje
839
839
The JavaScript object returned by ` java.import(classname) ` is a JavaScript constructor Function, implemented such that you can create instances of the Java class. For example:
840
840
841
841
``` javascript
842
- var Test = java .import (' Test' );
843
- var test = new Test ();
842
+ const Test = java .import (' Test' );
843
+ const test = new Test ();
844
844
845
845
Test .someStaticMethod (function (err , result ) { ... });
846
846
847
- var value1 = Test .NestedEnum .Value1 ;
847
+ const value1 = Test .NestedEnum .Value1 ;
848
848
```
849
849
850
850
But JavaScript reserves a few property names of Function objects: ` name ` , ` arguments ` , and ` caller ` . If your class has public static members (either methods or fields) with these names, node-java is unable to create the necessary property to implement the class's API. For example, suppose your class ` Test ` implements a static method named ` caller ` , or has a ` NestedEnum ` with a value ` name ` :
@@ -860,25 +860,25 @@ public class Test {
860
860
In JavaScript, you would expect to be able to use those static members like this:
861
861
862
862
``` javascript
863
- var Test = java .import (' Test' );
863
+ const Test = java .import (' Test' );
864
864
Test .caller (function (err , result ) { ... }); // ERROR
865
- var value = Test .NestedEnum .name ; // ERROR
865
+ const value = Test .NestedEnum .name ; // ERROR
866
866
```
867
867
868
868
Node-java can't create those properties, so the above code won't work. Instead, node-java appends a suffix to the name. The default suffix is simply an underscore ` _ ` , but you can change the suffix using ` asyncOptions ` :
869
869
870
870
``` javascript
871
- var java = require (' java' );
871
+ const java = require (' java' );
872
872
873
873
java .asyncOptions = {
874
874
asyncSuffix: " " ,
875
875
syncSuffix: " Sync" ,
876
876
ifReadOnlySuffix: " _alt"
877
877
};
878
878
879
- var Test = java .import (' Test' );
879
+ const Test = java .import (' Test' );
880
880
Test .caller_alt (function (err , result ) { ... }); // OK
881
- var value = Test .NestedEnum .name_alt ; // OK
881
+ const value = Test .NestedEnum .name_alt ; // OK
882
882
```
883
883
884
884
# Troubleshooting
0 commit comments