2012-08-07 3 views
1

Java3D를 사용하여 개발 한 게임을 마무리 중입니다. Java3D는 표준 JRE와 함께 제공되지 않기 때문에이 게임을 제공하는 모든 사람들은 Java3D를 다운로드해야합니다. 일부 친구들은 컴퓨터에 익숙하지 않아서 단지 디스크에 항아리를 작성하고 Java로 동적으로로드하는 것이 훨씬 적은 작업이라고 생각했습니다. 이보다 더 좋은 해결책이 있습니까? 또는 Jars를 동적으로로드하는 방법입니까?어떻게 Java3D 라이브러리를 동적으로로드합니까?

여기에서 내 다른 컴퓨터에 Java3D를 설치 한 :

그것은 꽤 빠른 설치했지만, 당신이에 아무것도를 다운로드 할 필요가 없습니다 게 나을 것 모든. 그들이 Java3D 만 사용한다면 내 게임을 다운로드하는 문제는 논리적이지 않습니다.

더 효율적인 해결책이 있습니까? 단지 Jars를 동적으로로드하는 것입니까? 여기에 편집


내 문제는 간단하다 :

  1. Java3D 자바의 표준 아니라, 별도로 설치해야합니다 확장이
  2. Java3D의 구성 3 Jar 파일 (j3core.jar, j3dutils, vecmath)
  3. 다른 컴퓨터에서 내 게임을 실행할 수 있기를 원합니다.

    방법 Java3D가

    를 설치하지 않는 내가 컴퓨터에서 Java3D를 실행합니까 : 그들을 내 간단한 질문은 여기에 이제 JAR 파일

을 다운로드하지? Jar 파일을 게임과 함께 CD에 쓰고 CD에서 바로 게임을 할 수 있으며 설치가 다운로드되지 않습니다. 어떻게해야합니까?

+0

를? 애플릿인가요? – Thilo

+0

@Thilo 응용 프로그램, 나는 그것을 디스크에 쓰고 있어요 그리고 나서 – John

+0

을 배포하면 왜 게임과 함께 java3d를 배포하지 않습니까? – Qnan

답변

1

jar 파일은 플랫폼에 특정한 것이 아니며, 동적 라이브러리의 원시 코드는입니다. 동적 라이브러리는 코드에서 호출 될 때 이미로드됩니다. 해당 코드를 다시 살펴보면 loadLibrary()은 확장 프로그램을 요청하지 않는다는 것을 알 수 있습니다. 이것에 대한 이유가 있습니다. JNI (Java Native Interface)는 실행중인 시스템에 따라 특정 확장을 찾습니다. 이런 이유로 JNI가 찾을 수있는 모든 동적 라이브러리 (예 : 응용 프로그램 바로 옆)를 패키지하면 JNI가 나머지를 처리합니다.

일부 코드

올바른 방향을 가리 키도록 :

저쩌구.(javah의 프로그램에 의해 생성 된 Blah.h)와 자바

public class blah{ 
    public native void meh(); 

    public static void main(String args[]) { 
     meh(); 
    } 
} 
static { 
    System.loadLibrary("thing"); 
} 

Blah.cpp

#include <jni.h> 
#include <iostream> 
#include "Blah.h" 

JNIEXPORT void JNICALL Java_Blah_meh() { 
    cout << "Meh."; 
} 

Blah.cpp 각 주요 시스템 (thing.dll, 일에 대한 동적 라이브러리로 컴파일된다. dylib, thing.so). Blah.java는 실행하기 쉽도록 jar 파일로 던져서 .class 파일로 컴파일됩니다. 중요한 부분은 파일 레이아웃입니다.

ThingApp //that's a folder 
    |thing.dll 
    |thing.dylib 
    |thing.so 
    |Blah.jar 

은 모든 시스템에이를 넣고 JNI 인해 확장하여 시스템에 적합한 파일을 찾을 메모리에 라이브러리를로드, 코드를 실행하고 출력 할 것이다 "시큰둥합니다.". JNI는 PATH 환경 변수 (또는 해당 시스템)에 있기 때문에 파일을 찾습니다. PATH는 실행 된 코드/프로그램이있는 폴더, java.library.path 시스템 속성으로 설정된 폴더 및 PATH 변수 자체에 포함 된 폴더를 포함합니다.

은 기본적으로 당신은 다른 사람을 위해 수행되는 모든으로 PATH에 대한 부분에 대해 걱정할 필요!

+0

올바른 방향으로 나를 밀어주기 위해 몇 가지 예제 코드를 게시 할 수 있습니까? – John

+0

@ 존 그게 도움이 되었습니까? – yodal

+0

Java3D 용 DLL을 가져 오거나 생성하는 방법은 무엇입니까? – John

1

디스크를 통해 배포하는 경우 설치 프로그램 (예 : 무료 Inno Setup)을 사용하여 응용 프로그램을 래핑 할 수 있습니다. 사용자가 디스크에 넣으면 설정이 시작됩니다. Inno Setup에서 설정을 구성하여 Java3D의 올바른 버전을 설치할 수도 있습니다.

저는 이것이 대부분의 디스크 배포 게임의 작동 방식이라고 생각합니다. 그보다 진보 된 셋업 래퍼를 ​​사용하려면 약간의 시간이 걸리지 만 그만한 가치가 있습니다. Inno Setup 이외에 다른 것을 모릅니다. 그러나 지금까지 요구 사항 중 하나를 처리 할 수 ​​있었기 때문에 그 중 하나를 추천합니다.

+0

포장 한 경우, 그러면 윈도우에서만 실행할 수있을 것이고 여러 다른 시스템에서 실행할 수 있기를 바랍니다. 그래서 Jar 파일에 프로그램을 압축하고 있습니다. – John

+0

플랫폼 독립적 인 설치 래퍼가있을 것이라고 확신합니까? 그리고 Java3D에는 다양한 운영 체제 용 설치 관리자가 있습니다. 그래서 당신은 개별적으로 지원하고자하는 모든 운영체제를 다룰 생각을하지 않습니다 ... 그 설치 래퍼는이 작업을 매우 단순하게 만듭니다 ... – brimborium

1

다운로드 여기에서 클래스 : http://java3d.java.net/binary-builds.html 및 포함 된 zip 파일의 압축을 풉니 다. lib 폴더의 jar 파일 (vecmath, j3dcore, j3dutils)을 클래스 폴더로 추출하십시오. 클래스 폴더를 단일 jar 파일로 번들합니다.

이제 (.so를 * .DLL, *) 위의 zip 파일의 bin 폴더에서 jar 파일에 라이브러리를 추가하려면 다음 단계를 수행하십시오 : 당신이 당신의 게임을 배포하려면 어떻게 How to make a JAR file that includes DLL files?

관련 문제