thejavavm的简单介绍

博主:adminadmin 2022-12-26 06:03:07 65

本篇文章给大家谈谈thejavavm,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

帮忙翻译

OK,搞定,因为不知alpha-SE是什么东东, 有些比较专业的词可能不准确,请自行修正.

Running the SETUP Program

运行 SETUP(安装) 程序

Run the SETUP.EXE program from the provided installation CD.

从(我们)提供的安装光盘(CD)运行SETUP.EXE程序.

This program is located in the alpha-SE directory on the CD.

该程序位于CD中alpha-SE文件夹里面.

Setup will install the alpha-SE program files, the Java Virtual Machine (VM) files which are required to run alpha-SE, and other related files (material optical constants files, optical model files, example files, etc.).

SETUP程序会安装alpha-SE的程序文件, alpha-SE 需要使用的Java虚拟机文件, 以及其它相关文件(光学常量材料文件, 光学模型文件, 实例文件等等).

The SETUP program also installs the calibration and configuration files for your specific instrument from the “CNF” directory on the CD.

SETUP程序同时也为特效工具从CD中的CNF文件夹中安装刻度和配置文件.

Follow the onscreen prompts provided by the SETUP program.

按照SETUP程序提供的屏幕提示操作.

The default directory for the installation is in the C:\alpha-SE directory.

默认的按照目录是C:\alpha-SE.

To minimize compatibility problems, it is highly recommended to install the alpha-SE software in this directory.

为了尽量减少兼容性问题, 我们强烈建议按照alpha-SE软件到此目录.

A short-cut icon (Fig. 2-7) will be placed on the Windows Desktop which can start the alpha-SE program.

启动alpha-SE程序的快捷方式图标(图.2-7)会被放置到Windows桌面上.

DO NOT start the alpha-SE program at this time.

不要在这个时候启动alpha-SE程序.

Figure 2-7. alpha-SE icon.

图2-7. alpha-SE图标.

Connecting the alpha-SE

连接alpha-SE

Connect the vacuum hose, power and USB connections to the back of the alpha-SE as shown in Fig. 2-8.

如图2-8所示, 连接alpha-SE后面的真空管(不知是不是, 太专业了), 电源以及连线.

Also, connect the vacuum hose to the vacuum pump, the power cable to outlet, and the other end of the USB cord to the computer.

同样, 把真空管连接到真空泵, 把电源线连接到插座, 把USB线的另一头连接到电脑.

The vacuum pump will need to be turned on before mounting samples.

在装载实例前, 必须开启真空泵.

Turn on the power to the alpha-SE unit by pressing the green power switch.

按下绿色的电源开关接通alpha-SE单元的电源.

If the switch does not “light up”, check the power connections.

如果开关没有亮, 检查电源连接.

Figure 2-8. Connect vacuum, power and USB connections.

图2-8. 连接真空管, 电源及连线.

Installing the alpha-SE USB Drivers

按照alpha-SE的USB驱动程序.

When the alpha-SE unit is connected to the computer with the USB cable, Windows will automatically detect that new hardware has been attached to the computer.

当alpha-SE单元通过USB线与电脑连接时, Windows操作系统会自动检测到新硬件已连接到电脑.

On some Microsoft operating systems (such as Windows XP), a “new hardware” message (Fig. 2-9) will be briefly displayed near the taskbar.

在某些微软操作系统中(如Windows XP), 会在任务栏旁边短暂地显示 “发现新硬件” 的消息(图2-9).

Figure 2-9. Message displayed in Windows XP when alpha-SE is initially connected to computer.

图2-9. 当alpha-SE最初连接到电脑时在Windows XP上显示的消息.

被Java运行环境检测 致命错误

这个游戏是基于java环境的,可能是你的系统版本和游戏不兼容,或者你本身装了java虚拟机

java 虚拟机报错 毫无头绪,很着急 请大家帮忙!

“The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. ”,明确的跟你说了,虚拟机Crash,是因为本地代码(native code)的问题,并且通过问题描述提示(problematic frame)可以找到bug产生的地方。好好检查下代码!

cocos2d-x怎么异步加载音乐

一、为游戏添加FlashScene

在游戏App初始化时,我们首先创建FlashScene,让游戏尽快显示FlashScene画面:

复制代码 代码如下:

// AppDelegate.cpp

bool AppDelegate::applicationDidFinishLaunching() {

… …

FlashScene* scene = FlashScene::create();

pDirector-runWithScene(scene);

return true;

}

在FlashScene init时,我们创建一个Resource Load Thread,我们用一个ResourceLoadIndicator作为渲染线程与Worker线程之间交互的媒介。

复制代码 代码如下:

//FlashScene.h

struct ResourceLoadIndicator {

pthread_mutex_t mutex;

bool load_done;

void *context;

};

class FlashScene : public Scene

{

public:

FlashScene(void);

~FlashScene(void);

virtual bool init();

CREATE_FUNC(FlashScene);

bool getResourceLoadIndicator();

void setResourceLoadIndicator(bool flag);

private:

void updateScene(float dt);

private:

ResourceLoadIndicator rli;

};

// FlashScene.cpp

bool FlashScene::init()

{

bool bRet = false;

do {

CC_BREAK_IF(!CCScene::init());

Size winSize = Director::getInstance()-getWinSize();

//FlashScene自己的资源只能同步加载了

Sprite *bg = Sprite::create("FlashSceenBg.png");

CC_BREAK_IF(!bg);

bg-setPosition(ccp(winSize.width/2, winSize.height/2));

this-addChild(bg, 0);

this-schedule(schedule_selector(FlashScene::updateScene)

, 0.01f);

//start the resource loading thread

rli.load_done = false;

rli.context = (void*)this;

pthread_mutex_init(rli.mutex, NULL);

pthread_attr_t attr;

pthread_attr_init(attr);

pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED);

pthread_t thread;

pthread_create(thread, attr,

resource_load_thread_entry, rli);

bRet=true;

} while(0);

return bRet;

}

static void* resource_load_thread_entry(void* param)

{

AppDelegate *app = (AppDelegate*)Application::getInstance();

ResourceLoadIndicator *rli = (ResourceLoadIndicator*)param;

FlashScene *scene = (FlashScene*)rli-context;

//load music effect resource

… …

//init from config files

… …

//load images data in worker thread

SpriteFrameCache::getInstance()-addSpriteFramesWithFile(

"All-Sprites.plist");

… …

//set loading done

scene-setResourceLoadIndicator(true);

return NULL;

}

bool FlashScene::getResourceLoadIndicator()

{

bool flag;

pthread_mutex_lock(rli.mutex);

flag = rli.load_done;

pthread_mutex_unlock(rli.mutex);

return flag;

}

void FlashScene::setResourceLoadIndicator(bool flag)

{

pthread_mutex_lock(rli.mutex);

rli.load_done = flag;

pthread_mutex_unlock(rli.mutex);

return;

}

我们在定时器回调函数中对indicator标志位进行检查,当发现加载ok后,切换到接下来的游戏开始场景:

复制代码 代码如下:

void FlashScene::updateScene(float dt)

{

if (getResourceLoadIndicator()) {

Director::getInstance()-replaceScene(

WelcomeScene::create());

}

}

到此,FlashScene的初始设计和实现完成了。Run一下试试吧。

二、解决崩溃问题

在GenyMotion的4.4.2模拟器上,游戏运行的结果并没有如我期望,FlashScreen显现后游戏就异常崩溃退出了。

通过monitor分析游戏的运行日志,我们看到了如下一些异常日志:

复制代码 代码如下:

threadid=24: thread exiting, not yet detached (count=0)

threadid=24: thread exiting, not yet detached (count=1)

threadid=24: native thread exited without detaching

很是奇怪啊,我们在创建线程时,明明设置了 PTHREAD_CREATE_DETACHED属性了啊:

复制代码 代码如下:

pthread_attr_setdetachstate(attr, PTHREAD_CREATE_DETACHED);

怎么还会出现这个问题,而且居然有三条日志。翻看了一下引擎内核的代码TextureCache::addImageAsync,在线程创建以及线程主函数中也没有发现什么特别的设置。为何内核可以创建线程,我自己创建就会崩溃呢。Debug多个来回,问题似乎聚焦在resource_load_thread_entry中执行的任务。在我的代码里,我利用SimpleAudioEngine加载了音效资源、利用UserDefault读取了一些持久化的数据,把这两个任务去掉,游戏就会进入到下一个环节而不会崩溃。

SimpleAudioEngine和UserDefault能有什么共同点呢?Jni调用。没错,这两个接口底层要适配多个平台,而对于Android 平台,他们都用到了Jni提供的接口去调用Java中的方法。而Jni对多线程是有约束的。Android开发者官网上有这么一段话:

复制代码 代码如下:

All threads are Linux threads, scheduled by the kernel. They're usually started from managed code (using Thread.start), but they can also be created elsewhere and then attached to the JavaVM. For example, a thread started with pthread_create can be attached with the JNI AttachCurrentThread or AttachCurrentThreadAsDaemon functions. Until a thread is attached, it has no JNIEnv, and cannot make JNI calls.

由此看来pthread_create创建的新线程默认情况下是不能进行Jni接口调用的,除非Attach到Vm,获得一个JniEnv对象,并且在线 程exit前要Detach Vm。好,我们来尝试一下,Cocos2d-x引擎提供了一些JniHelper方法,可以方便进行Jni相关操作。

复制代码 代码如下:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)

#include "platform/android/jni/JniHelper.h"

#include jni.h

#endif

static void* resource_load_thread_entry(void* param)

{

… …

JavaVM *vm;

JNIEnv *env;

vm = JniHelper::getJavaVM();

JavaVMAttachArgs thread_args;

thread_args.name = "Resource Load";

thread_args.version = JNI_VERSION_1_4;

thread_args.group = NULL;

vm-AttachCurrentThread(env, thread_args);

… …

//Your Jni Calls

… …

vm-DetachCurrentThread();

… …

return NULL;

}

关于什么是JavaVM,什么是JniEnv,Android Developer官方文档中是这样描述的:

The JavaVM provides the "invocation interface" functions, which allow you to create and destroy a JavaVM. In theory you can have multiple JavaVMs per process, but Android only allows one.

The JNIEnv provides most of the JNI functions. Your native functions all receive a JNIEnv as the first argument.

The JNIEnv is used for thread-local storage. For this reason, you cannot share a JNIEnv between threads.

三、解决黑屏问题

上面的代码成功解决了线程崩溃的问题,但问题还没完,因为接下来我们又遇到了“黑屏”事件。所谓的“黑屏”,其实并不是全黑。但进入游戏 WelcomScene时,只有Scene中的LabelTTF实例能显示出来,其余Sprite都无法显示。显然肯定与我们在Worker线程加载纹理 资源有关了:

复制代码 代码如下:

SpriteFrameCache::getInstance()-addSpriteFramesWithFile("All-Sprites.plist");

我们通过碎图压缩到一张大纹理的方式建立SpriteFrame,这是Cocos2d-x推荐的优化手段。但要想找到这个问题的根源,还得看monitor日志。我们的确发现了一些异常日志:

复制代码 代码如下:

libEGL: call to OpenGL ES API with no current context (logged once per thread)

通过Google得知,只有Renderer Thread才能进行egl调用,因为egl的context是在Renderer Thread创建的,Worker Thread并没有EGL的context,在进行egl操作时,无法找到context,因此操作都是失败的,纹理也就无法显示出来。要解决这个问题就 得查看一下TextureCache::addImageAsync是如何做的了。

TextureCache::addImageAsync只是在worker线程进行了image数据的加载,而纹理对象Texture2D instance则是在addImageAsyncCallBack中创建的。也就是说纹理还是在Renderer线程中创建的,因此不会出现我们上面的 “黑屏”问题。模仿addImageAsync,我们来修改一下代码:

复制代码 代码如下:

static void* resource_load_thread_entry(void* param)

{

… …

allSpritesImage = new Image();

allSpritesImage-initWithImageFile("All-Sprites.png");

… …

}

void FlashScene::updateScene(float dt)

{

if (getResourceLoadIndicator()) {

// construct texture with preloaded images

Texture2D *allSpritesTexture = TextureCache::getInstance()-

addImage(allSpritesImage, "All-Sprites.png");

allSpritesImage-release();

SpriteFrameCache::getInstance()-addSpriteFramesWithFile(

"All-Sprites.plist", allSpritesTexture);

Director::getInstance()-replaceScene(WelcomeScene::create());

}

}

安装Java虚拟机

在安装以前可以在ORACLE_HOME/javavm 目录下找到readme,另外注意的是所有jvm相关的sql都必须用sys as sysdba权限.

先决条件:

1:rollback segment至少100m

2:System tablespace,所有的脚本大概要消耗130m,initjvm.sql 所产生

的objects 消耗接近90m空间.

3:Shared_pool_size =50m

4:Java_pool_size =30m

pool sizes 大小可以用

select * from v$sgastat where name = 'free memory' 检定.

安装过程:

1:***INITJVM.SQL***

SQLset echo on

SQLspool jvminst.log

SQL@/javavm/install/initjvm.sql

SQLspool off

作用:载入初始用来支持java应用的java类包,初始化支持java和corba的名字空间的表,以及发布顶层调用的入口指针.

支持的java类包括:

The standard Java runtime

Bytecode verifier and optimizer

Java and SQLJ compilers

JDBC runtime

CORBA ORB and EJB runtime

Some additional support classes, such as DBMS_JAVA, which are

described in "Package DBMS_JAVA"

initjvm.sql 同时做以下动作:

1:将类载入SYS schema

2:建立这些类的同义词,使可以被所有用户访问.

3:调整一些类的权限使支持CORBA callouts.

4:定义一些数据库start up 和shut down触发器.

注意:如果initjvm.sql 运行失败,在重新运行以前必须先执行rmjvm.sql,安装失败一般都是因为资源不足的问题,比如memory 和tablespace

2:***INITXML.SQL***

SQLset echo on

SQLspool initxml.log

SQL@?/oracore/admin/initxml.sql

SQLspool off

主要功能:

将xml 组件load到jserver里,可以利用plsql的接口对xlm进行扩展.

XML Parser for PL/SQL 支持 W3C XML 1.0 规范

3:***CATXSU.SQL***

SQLset echo on

SQLspool catxsu.log

SQL@?/rdbms/admin/catxsu.sql

SQLspool off

主要功能:

将XMLSQL Utility (XSU)装入数据库,主要用来做data transformation,

将关系型的数据的SQL query result转换到xml格式,反之依然.

***INIT_JIS.SQL***

SQLset echo on

SQLspool init_jis.log

SQL@?/javavm/install/init_jis.sql

SQLspool off

主要功能:

用来安装Oracle Servlet Engine (OSE)的,OSE象一个特定的web server一样工作,servlet类 通过java载入命令置入数据库,并在数据库的namespace 里注册,A servlet runner 处理HTTP 请求,publise serverlet进程,invoke serverlet 方法.

***JISJA.SQL***

主要功能:

主要用来使能JAccelerator (ncomp) for JIS,对优化性能有帮助,JServer Accelerator 通过ncomp工具将java类编译成共享库,来提高执行效率.

***JISAEPHC.SQL***

SQLset echo on

SQLspool jisaephc.log

SQL@?/javavm/install/jisaephc.sql

SQLspool off

主要功能:

OSE 安装完毕后,Adds the set of default end points to the server with hardcoded values for the admin service

***INITPLGS.SQL***

SQLset echo on

SQLspool initplgs.log

SQL@?/rdbms/admin/initplgs.sql

SQLspool off

主要功能:

将PLSQL Gateway Servlet 的jar文件装入数据库,这个使plsql的存储过程可以象servelet那样运行,PL/SQL 过程可以在web上运行而无需做任何改装,

***INITJSP.SQL***

SQLset echo on

SQLspool initjsp.log

SQL@?/jsp/install/initjsp.sql

SQLspool off

主要功能:

用来安装Java Server Pages (JSP) ,

***JSPJA.SQL***

SQLspool jspja.log

SQL@?/jsp/install/jspja.sql

SQLspool off

主要功能:

用JAccelerator 来performace jsp功能组件,以native 方式编译java代码.

***INITPLSJ.SQL***

SQLspool initplsj.log

SQL@?/rdbms/admin/initplsj.sql

SQLspool off

主要功能:

初始化plsql 的java类库

***INITJMS.SQL***

SQLspool initjms.log

SQL@?/rdbms/admin/initjms.sql

SQLspool off

主要功能:

将AQ/JMS 载入数据库,oracle ssaging Service (JMS)提供了一组java api来支持Advanced Queuing based on the JMS standard,

***INITREPAPI.SQL***

SQLspool initrepapi.log

SQL@?/rdbms/admin/initrepapi.sql

SQLspool off

主要功能:

This script loads RepAPI server classes and publishes the 'repapi' objects

The RServer.class and its helper class are published in /etc namespace. RepAPI is a runtime library that enables clients to replicate data with Oracle servers.

***INITSOXX.SQL***

SQLspool initsoxx.log

SQL@?/rdbms/admin/initsoxx.sql

SQLspool off

主要功能:

This script loads objects, extensibility and xml related java classes into the database.

***JISAEP.SQL***

SQLspool jisaep.log

SQL@?/javavm/install/jisaep admin 8080 9090

SQLspool off

主要功能:

将OSE 配置成缺省的web服务,需要2个或三个参数

1:服务名,2:TCP 端口,3: ssl端口

-----

如何检定安装是否成功:

新装的数据库,即运行过catalog.sql 和 catproc.sql后,数据库里并没载入java对象,可以通过查询DBA_OBJECTS,条件是OBJECT_TYPE like 'JAVA%'来检查.

select count(*) from DBA_OBJECTS where OBJECT_TYPE like 'JAVA%'; This should return a count of 6785.

查找无效java对象

select count(*) from DBA_OBJECTS

where OBJECT_TYPE like 'JAVA%' and STATUS = 'INVALID';

如果数量小于第一个查询的值或第二个查询有返回,可能就需要浏览一下spool 的log,来找原因了.

INITJVM.SQL CREATES:

-

3 functions

4 indexes

6438 java classes

290 java data

57 java resources

6 packages

1 sequence

6443 synonyms

8 tables

2 triggers

3 views

SQL select count(*), object_type from dba_objects where object_type like 'JAVA%' group by object_type;

6438 JAVA CLASS

290 JAVA DATA

57 JAVA RESOURCE

6785

INITXML.SQL CREATES:

-

2 indexes

272 classes

31 java resources

1 lob

19 packages

272 synonyms

2 tables

CATXSU.SQL

CREATES:

29 classes

30 java resources

3 packages

3 synonyms

INIT_JIS.SQL

CREATES: --

12 indexes

2384 classes

10 java resources

1 lob

13 packages

5 sequences

2400 synonyms

17 tables

1 trigger

1 view

JISJA.SQL

CREATES: ------------------

154 classes

8 java sources

1 procedure

3 tables

JISAEPHC.SQL

CREATES: --

No new objects......

INITPLGS.SQL

CREATES: --

1 class

1 synonym

INITJSP.SQL

CREATES: -

275 classes

2 java resources

275 synonyms

JSPJA.SQL

CREATES: ------------------

20 classes

INITPLSJ.SQL

CREATES: --

2 classes

INITJMS.SQL CREATES: -

159 classes 159 synonyms

INITREPAPI.SQL

CREATES: ----

71 classes

71 synonyms

INITSOXX.SQL

CREATES: --

37 classes

37 synonyms

JISAEP.SQL

CREATES:

No new objects.....

TOTALS AFTER THE EXECUTION OF ALL SCRIPTS:

----

SQLselect count(*) from dba_objects

where object_type like 'JAVA%' and owner = 'SYS';

COUNT(*) ---------- 10270

SQLselect count(*) from dba_objects

where object_type like 'JAVA%' and status = 'INVALID' and owner = 'SYS';

COUNT(*) ---------- 0

运行SPSS时出现错误提示fail to creat the java VM

大概就是没有装Java虚拟机了

装一个呗

SPSS 16版开始使用Java了。你也可以使用SPSS 15 或更早之前的版本

关于thejavavm和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。