2014-07-04 19 views
13

Tôi cần sử dụng các lớp từ tệp jar bên trong JavaScript. Tôi đang sử dụng JavaScript thông qua Java ScriptEngine và muốn làm điều gì đó tương tự như những gì tôi đã làm với Jython đây,Sử dụng một lọ trong JavaScript thông qua Java ScriptEngine

import org.python.core.Py; 
    import org.python.core.PySystemState; 
    ... 
    PySystemState engineSys = new PySystemState(); 
    engineSys.path.append(Py.newString("C:/GMSEC_API/bin/gmsecapi.jar")); 
    Py.setSystemState(engineSys); 
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("python"); 

Khi tôi làm điều này với Jython nó hoạt động tốt và các file python có thể sử dụng các lớp api mà bên trong tệp jar.

+0

Jar là một kho lưu trữ java. Nó không liên quan gì đến JavaScript. – MightyPork

+13

JavaScript có thể sử dụng các lớp từ Java. Các lớp Java tôi muốn sử dụng nằm trong tệp Jar. Bạn không thấy ý tưởng với mã ở trên để làm tương tự với Python/Jython? –

Trả lời

6

Tôi có thể sử dụng các lớp của jar trong JavaScript theo cách này, nhưng bạn phải đặt jar vào đường dẫn lớp khi bạn chạy nó. Tôi đã được sau khi một giải pháp tương tự như Jython/Python của nơi bạn có thể thiết lập jar bên trong Java nhưng tôi sẽ chỉ tạo ra các tập tin batch và sh tập tin và thiết lập nó theo cách đó (có vẻ dễ dàng hơn để làm điều đó theo cách đó ngay bây giờ). Đây là giải pháp của tôi làm việc cho tôi.

Để Compile Sau đó Run:

cd C:\your\directory\folder\with\the\javascript\and\java\files 

    javac -d . ClassSpy.java FileSearch.java HelloWorld.java Main.java Parameters.java Run.java 

    java -cp ./;C:\ABCAPI\bin\abcapi.jar hammer.main.Main gui=true input=JavaScriptStatus.js 

Các bình luận về dòng trên:

  • khi biên dịch, bạn có thể sử dụng -d . nếu bạn có file java của bạn như các gói mà bạn đã định nghĩa và nó sẽ đặt chúng trong các thư mục với tên gói của bạn. Nếu đó không phải là rõ ràng chỉ cần kiểm tra bài đăng này (tôi nhận được tắt nhiệm vụ) How to compile packages in java?. Một lưu ý khác là khi tôi chạy nó, tôi đã thêm hai thứ vào đường dẫn lớp của tôi -cp là viết tắt của đường dẫn lớp và mọi thứ sau đó sẽ được thêm vào đường dẫn lớp của bạn cho lần chạy hiện tại này. Bạn có thể tách chúng bằng dấu chấm phẩy. ./ thêm thư mục hiện tại vào đường dẫn lớp và phần còn lại tôi đã thêm sau đó là vị trí tệp jar của API tôi cần.

  • hammer.main là vị trí gói của lớp Chính là lớp chứa hàm chính của tôi để bắt đầu chương trình.

  • Hai đối số sau đó cụ thể cho chương trình của tôi và bạn có thể thấy tệp JavaScript tôi sẽ yêu cầu Java ScriptEngine đọc và thực thi.

để sử dụng Jar file Bên trong JavaScript:

Bây giờ tập tin jar đang trên con đường lớp và có thể nhìn thấy chúng tôi có thể nhận được một gói từ bên trong file jar sau đó gọi các lớp từ gói . Vì vậy, ví dụ bên dưới abc.foo.pack.name là một gói bên trong số abcapi.jar và hai lớp tôi đang sử dụng ClassFromTheJarFileAnotherClassFromTheJarFile nằm trong gói đó. Tôi đang sử dụng một kỹ thuật thiết lập các gói để biến một tiền tố sau đó các lớp tôi muốn sử dụng với các biến chứa các gói. Một cách khác là để nói importPackage(com.foo.bar) sau đó bạn sẽ không phải tiền tố các lớp học mỗi khi bạn khởi tạo chúng, nhưng kỹ thuật này không làm việc cho tôi vì lý do nào đó (có lẽ tôi đã làm điều gì đó sai mặc dù).Dù sao đi nữa đoạn mã sau hoạt động tốt đối với tôi,

myvariable = Packages.abc.foo.pack.name; 

    var foo = new myvariable.ClassFromTheJarFile("arg1","arg2"); 

    foo.doSomething(); 

    var fooSister = new myvariable.AnotherCLassFromTheJarFile("arg1"); 

    fooSister.doSomthingFromThisClass(); 

Kết luận:

Hóa ra sai lầm của tôi đã cố gắng để nhập khẩu các lớp trực tiếp như thế này,

myvariable = Packages.abc.foo.pack.name.ClassFromTheJarFile; 

Sau đó, tôi đã thử sử dụng nó như,

var foo = new myvariable.ClassFromTheJarFile("arg1","arg2"); 

không làm việc.

Tôi hy vọng điều này sẽ giúp ai đó bởi vì tôi đã nhận được rất nhiều nhận xét như, "Bạn biết Java và JavaScript là hai điều khác nhau đúng". Vâng vâng tôi biết điều đó, điểm của bạn là gì?

Giữ Trong Tâm:

Tôi không sử dụng điều này trong một trình duyệt hoặc qua internet. Tôi đang sử dụng điều này thông qua Java ScriptEngine. Nếu bạn cần tải tệp jar từ một URL, liên kết này tôi tìm thấy có thể giúp bạn http://mozilla-firefox-extension-dev.blogspot.com/2004/11/calling-java-code-in-custom-jars-from.html

Các vấn đề liên quan