JavaPoly.js یک لایبرری است که با استفاده از آن میتوان JVM یا «ماشین مجازی جاوا» را در داخل مرورگر اجرا کرد. JavaPoly.js این امکان را به توسعه دهندگان میدهد تا کدهای نوشته شده با زبان جاوا را با استفاده از زبان جاوا اسکریپت در داخل مرورگر اجرا کنند. برای آشنایی بیشتر با این لایبرری، با سکان آکادمی همراه باشید.
JavaPoly.js این امکان را به کاربران میدهد تا حتی اگر جاوا روی سیستم آنها نصب نباشد، بتوانند کدهای جاوا را داخل مرورگر اجرا کنند. برای مثال، به سورس زیر توجه کنید:
<!-- Include the Polyfill -->
<script src=""></script>
<!-- Write your Java code -->
<script type="text/java">
package com.demo;
import com.javapoly.dom.Window;
public class Greeter
{
public static void sayHello(String name)
{
Window.alert("Hello " + name + ", from Java!");
}
}
</script>
<!-- Invoke your Java code from Javascript -->
<script type="text/javascript">
com.demo.Greeter.sayHello("world");
</script>
علاوه بر این، بسیاری از لایبرری های زبان Java را نیز به سادگی ایمپورت کردن لایبرری های جاوا اسکریپت، می توان به داخل برنامه اضافه کرد:
<!-- Include the Polyfill -->
<script src=""></script>
<!-- Include your favorite Java libraries (jar files) -->
<script type="text/java" src=""></script>
<script type="text/java" src=""></script>
<script type="text/java" src=""></script>
<!-- Or, include individual .class files -->
<script type="text/java" src=""></script>
<script type="text/java" src=""></script>
<!-- Or just include the source directly -->
<script type="text/java" src=""></script>
<script type="text/java" src=""></script>
سپس لایبرری های ایمپورت شده را از طریق جاوا اسکریپت بواسطه ی نام کاملشان می توان فراخوانی کرد:
<script type="text/javascript">
com.yourpackage.Foo.doSomething();
com.yourpackage.Noise.doSomethingElse();
</script>
نکته یی که در ارتباط با این لایبرری باید مد نظر داشت، این است که زبان برنامه نویسی جاوا اصطلاحا Multi-threaded است اما این در حالی است که زبان جاوا اسکریپت Single-threaded است؛ لذا مادامی که مرورگر صبر می کند تا JavaPoly.js پاسخی را بازگرداند، به منظور جلوگیری از توقف کار رابط کاربری مرورگر، تمامی فراخوانی های JVM اصطلاحا Asynchronous یا «نامتقارن» هستند:
var promise = com.mypackage.MyClass.getSomeValue();
promise.then(function(result) {
console.log(result); // "Stuff worked!"
}, function(err) {
console.log(err); // Error: "It broke"
})
JavaPoly.js این امکان را به کاربران میدهد تا حتی اگر جاوا روی سیستم آنها نصب نباشد، بتوانند کدهای جاوا را داخل مرورگر اجرا کنند. برای مثال، به سورس زیر توجه کنید:
<!-- Include the Polyfill -->
<script src=""></script>
<!-- Write your Java code -->
<script type="text/java">
package com.demo;
import com.javapoly.dom.Window;
public class Greeter
{
public static void sayHello(String name)
{
Window.alert("Hello " + name + ", from Java!");
}
}
</script>
<!-- Invoke your Java code from Javascript -->
<script type="text/javascript">
com.demo.Greeter.sayHello("world");
</script>
علاوه بر این، بسیاری از لایبرری های زبان Java را نیز به سادگی ایمپورت کردن لایبرری های جاوا اسکریپت، می توان به داخل برنامه اضافه کرد:
<!-- Include the Polyfill -->
<script src=""></script>
<!-- Include your favorite Java libraries (jar files) -->
<script type="text/java" src=""></script>
<script type="text/java" src=""></script>
<script type="text/java" src=""></script>
<!-- Or, include individual .class files -->
<script type="text/java" src=""></script>
<script type="text/java" src=""></script>
<!-- Or just include the source directly -->
<script type="text/java" src=""></script>
<script type="text/java" src=""></script>
سپس لایبرری های ایمپورت شده را از طریق جاوا اسکریپت بواسطه ی نام کاملشان می توان فراخوانی کرد:
<script type="text/javascript">
com.yourpackage.Foo.doSomething();
com.yourpackage.Noise.doSomethingElse();
</script>
نکته یی که در ارتباط با این لایبرری باید مد نظر داشت، این است که زبان برنامه نویسی جاوا اصطلاحا Multi-threaded است اما این در حالی است که زبان جاوا اسکریپت Single-threaded است؛ لذا مادامی که مرورگر صبر می کند تا JavaPoly.js پاسخی را بازگرداند، به منظور جلوگیری از توقف کار رابط کاربری مرورگر، تمامی فراخوانی های JVM اصطلاحا Asynchronous یا «نامتقارن» هستند:
var promise = com.mypackage.MyClass.getSomeValue();
promise.then(function(result) {
console.log(result); // "Stuff worked!"
}, function(err) {
console.log(err); // Error: "It broke"
})