diff --git a/README.md b/README.md index 690d99c..352f349 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ java2js can translate simple Java programs to JavaScript and runs them using a J | Double | Exception | Float | | Integer | Long | Short | | String | StringBuilder | System | -| Thread | Throwable | | +| Thread | | | | `java.security` | | :-------------- | diff --git a/jdk.js b/jdk.js index 9d2d381..5e54d23 100755 --- a/jdk.js +++ b/jdk.js @@ -66,6 +66,7 @@ let names = [ 'Character', 'Double', + 'Exception', 'Float', 'Integer', 'Long', @@ -19129,12 +19130,13 @@ 'nextLong', 'nextFloat', 'nextDouble' - ] + ], + Thread: ['sleep'] }; if (typeof QuintOS != 'undefined') { Object.assign(asyncMethods, { Sprite: ['move'], - window: ['alert', 'delay', 'erase', 'eraseRect', 'frame', 'play', 'prompt', 'text', 'textRect'] + window: ['alert', 'delay', 'eraseRect', 'frame', 'play', 'prompt', 'text', 'textRect'] }); } if (!asyncMethods.window) asyncMethods.window = []; diff --git a/jdk/java/lang/Exception.js b/jdk/java/lang/Exception.js index e69de29..18cf4ac 100755 --- a/jdk/java/lang/Exception.js +++ b/jdk/java/lang/Exception.js @@ -0,0 +1,13 @@ +jdk.imports['java.lang.Exception'].load = async () => { + // TODO: should accept a PrintStream or PrintWriter + Error.prototype.printStackTrace = function (p) { + log(this.stack); + }; + Error.prototype.getStackTrace = function () { + return this.stack; + }; + Error.prototype.getMessage = function () { + return this.message; + }; + jdk.java.lang.Exception = Error; +}; diff --git a/jdk/java/lang/Thread.js b/jdk/java/lang/Thread.js index 88bcbaa..81b7dd1 100755 --- a/jdk/java/lang/Thread.js +++ b/jdk/java/lang/Thread.js @@ -1,8 +1,9 @@ jdk.imports['java.lang.Thread'].load = async () => { - class Thread { - async sleep(millis) { - await setTimeout(millis); - } - } + class Thread {} + Thread.sleep = (millis) => { + return new Promise((resolve) => { + setTimeout(resolve, millis); + }); + }; jdk.java.lang.Thread = Thread; }; diff --git a/jdk/java/lang/Throwable.js b/jdk/java/lang/Throwable.js deleted file mode 100755 index e69de29..0000000 diff --git a/jdk/java/util/Scanner.js b/jdk/java/util/Scanner.js index 73fc37e..41a52c4 100755 --- a/jdk/java/util/Scanner.js +++ b/jdk/java/util/Scanner.js @@ -25,37 +25,40 @@ jdk.imports['java.util.Scanner'].load = async () => { // if pattern is string return this.in.stream.slice(this.in.mark).includes(pattern); } - async hasNextLine() { + hasNextLine() { return this.hasNext('\n'); } - async nextLine() { - return await this.next(/.*\n/); + nextLine() { + return this.next(/.*/); } async next(pattern) { while (this._loading || !(await this.hasNext(pattern))) { - await new Promise((done) => setTimeout(() => done(), 100)); + await new Promise((resolve) => setTimeout(resolve, 100)); } let buf = this.in.stream.slice(this.in.mark); let substr = buf.match(pattern)[0]; let start = buf.indexOf(substr); let end = buf.indexOf('\n'); + if (end == -1) { + throw 'NoSuchElementException: No ' + pattern.toString() + ' found in buffer ' + buf; + } this.in.read(end - start + 1); - return buf.slice(start, end); + return buf.slice(start, substr.length); } - async nextShort() { - return await this.nextInt(); + nextShort() { + return this.nextInt(); } async nextInt() { - return Number(await this.next(/\d+\D/)); + return Number(await this.next(/\d+/)); } - async nextLong() { - return await this.nextInt(); + nextLong() { + return this.nextInt(); } async nextFloat() { - return Number(await this.next(/[0-9\.]+[^0-9\.]/)); + return Number(await this.next(/[0-9\.]+/)); } - async nextDouble() { - return await this.nextFloat(); + nextDouble() { + return this.nextFloat(); } close() {} } diff --git a/package.json b/package.json index bc23b27..87d0395 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "java2js", - "version": "1.2.5", + "version": "1.2.6", "description": "Converts Java to JavaScript and runs it with a JS JDK", "main": "jdk.js", "scripts": {