访问java
Android.mk文件:
LOCAL_SRC_FILES参数用空格隔开
[c-sharp] view plainprint?
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=native
LOCAL_SRC_FILES:=geolo.cpp my_jni.h
include $(BUILD_SHARED_LIBRARY)
2. geolo.cpp
先用FindClass方法找到java类,有点类似java的反射用LoadClass
再用CallObjectMethod方法调用Java类的函数。
[c-sharp] view plainprint?
#include "my_jni.h"
jobject getInstance(JNIEnv* env, jclass obj_class){
jmethodID construction_id = env->GetMethodID(obj_class, "<init>", "()V");
jobject obj = env->NewObject(obj_class, construction_id);
return obj;
}
JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv* env, jobject thiz){
jstring str;
jclass java_class = env->FindClass("com/easepal/geolo/CForCall");
if (java_class == 0){
return env->NewStringUTF("not find class!");
}
jobject java_obj = getInstance(env, java_class);
if (java_obj == 0){
return env->NewStringUTF("not find java OBJ!");
}
jmethodID java_method = env->GetMethodID(java_class, "GetJavaString", "()Ljava/lang/String;");
if(java_method == 0){
return env->NewStringUTF("not find java method!");
}
str = (jstring)env->CallObjectMethod(java_obj, java_method);
return str;
}
3. my_jni.h
[c-sharp] view plainprint?
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_easepal_geolo_CActivityMain */
#ifndef _Included_com_easepal_geolo_CActivityMain
#define _Included_com_easepal_geolo_CActivityMain
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_easepal_geolo_CActivityMain
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_easepal_geolo_CActivityMain_stringFromJNI(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4. CActivityMain.java
[c-sharp] view plainprint?
package com.easepal.geolo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class CActivityMain extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText( stringFromJNI("hello") );
setContentView(tv);
}
static {
System.loadLibrary("native");
}
public native String stringFromJNI(String str);
}
5. CForCall.java
[c-sharp] view plainprint?
package com.easepal.geolo;
public class CForCall{
public CForCall(){};
//public ~CForCall(){};
public String GetJavaString(){
String str;
str = "123456";
return str;
}
}
㈡ 怎么样快速访问 java文件 location
你所说的java文件是什么文件?如果是java源码文件是不能调用的,但如果是编译后的class文件可以通过类加载器进行加载,然后通过反射调用;但一般会通过实现特定的接口来简化调用过程。一个自定义的类加载器如下 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class MyClassLoader extends ClassLoader {
//类加载器的名称
private String name;
//类存放的路径
private String path = "E:\\bin";
MyClassLoader(String name) {
this.name = name;
}
MyClassLoader(ClassLoader parent, String name) {
super(parent);
this.name = name;
}
/**
* 重写findClass方法,加载特定目录下的类文件
*/
@Override
public Class<?> findClass(String name) {
byte[] data = loadClassData(name);
return this.defineClass(name, data, 0, data.length);
}
public byte[] loadClassData(String name) {
try {
name = name.replace(".", "//");
FileInputStream is = new FileInputStream(new File(path, name + ".class"));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b = 0;
while ((b = is.read()) != -1) {
baos.write(b);
}
return baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
㈢ java访问权限控制问题
默认访问权限(包访问权限):如果一个类的方法或变量被包访问权限修饰,也就意味着只能在同一个包中的其他类中显示地调用该类的方法或者变量,在不同包中的类中不能显示地调用该类的方法或变量。
private:如果一个类的方法或者变量被private修饰,那么这个类的方法或者变量只能在该类本身中被访问,在类外以及其他类中都不能显示地进行访问。
protected:如果一个类的方法或者变量被protected修饰,对于同一个包的类,这个类的方法或变量是可以被访问的。对于不同包的类,只有继承于该类的类才可以访问到该类的方法或者变量。
public:被public修饰的方法或者变量,在任何地方都是可见的。
㈣ 什么是Java类的访问权限
在解释访问权限控制之前,先看一个场景。在学生信息管理系统中,有两个类,分别是学生类和课程类,课程类提供了课程表和课程安排两个方法,学生类可以调用课程类提供的课程表查看课程安排,但不能调用课程安排方法,该如何处理,此时就可以利用访问权限来进行控制。
在Java中,提供了四种访问权限控制:默认访问权限(包访问权限),public,private以及protected。
默认访问权限(default):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
private: 对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护的”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。下表列出了四种访问权限的控制粒度:
packagecom.cxh.test1;
classPeople{//默认访问权限(包访问权限)
privateStringname=null;
publicPeople(Stringname)
{
this.name=name;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname)
{
this.name=name;
}
}
从代码可以看出,修饰People类采用的是默认访问权限,而由于People类和Main类在同一个包中,因此People类对于Main类是可见的。
㈤ 如何在 Web 浏览器中启用 Java
请按照以下说明通过您的 Web 浏览器启用 Java:
适用于 Windows 的浏览器
Internet Explorer
单击工具,然后单击 Internet 选项
选择安全选项卡,选择自定义级别按钮
向下滚动到 Java 小应用程序脚本
确保选中启用单选按钮
单击确定保存您的首选设置
Chrome
单击扳手图标,然后选择选项。
依次选择高级选项和隐私内容设置。
将显示“内容设置”面板。
在插件部分,选择禁用单独插件链接以检查是否已启用 Java
单击启用链接(如果显示“禁用”链接,则已启用 Java)
注意:此外,您也可通过在浏览器地址栏中 键入“about:plugins” 来访问“插件”设置。
适用于 Windows 和 Mac OS X 的浏览器
Firefox
启动 Mozilla Firefox 浏览器,如果该浏览器正在运行,则重新启动它。
在浏览器顶部,选择 Firefox 按钮(或 Windows XP 中的工具菜单),然后选择附加组件
此时将打开“附加组件管理器”选项卡。
在“附加组件管理器”选项卡中,选择插件
单击 Java (TM) 平台插件以将其选定
单击启用按钮(如果按钮显示为禁用,则 Java 已启用)
Safari
启动 Safari 浏览器
单击“Safari”并选择首选项
单击安全选项卡
选中(选择)启用 Java 复选框
关闭“Safari 首选项”窗口
Opera 4.x 及更高版本
适用于 Windows 的 Opera 不使用 Java,但是 Opera Web 浏览器中已嵌入了 Java。
适用于其他平台的 Opera 可支持 Java。请参见 Opera 平台文档。
有关详细信息,请参见以下 Opera 支持文档:
Opera 中的 Java 软件支持
抢首赞
评论
分享
举报
河南新华电脑学院
2021-10-26 · 专注互联网IT教育,电脑培训院校
关注
启动Mozilla Firefox 浏览器,如果该浏览器正在运行,则重新启动它。
在浏览器顶部,选择Firefox按钮(或 Windows XP 中的工具菜单)...
在“附加组件管理器”选项卡中,选择插件
单击Java (TM) 平台插件以将其选定
㈥ JAVA 内部类访问
外部类能访问非静态内部类的全部私有字段和方法。
这是由编译器自动产生了一些访问器来实现的。
㈦ 如何使用Python访问Java类
可以使用线程类来调用执行 像执行外部命令一样 访问具体属性和方法的话不可以 实在不行你就用Python来实现你那个java类的功能不就得了
如有疑问追问,如满意记得采纳,
如果有其他问题也可点我名字向我求助
答题不易,
如果没有回答完全,请您谅解,
请采纳最快回答的正确答案!!谢谢!