JNI教程,例如本教程,很好地介绍了如何访问对象中的原始字段,以及如何访问作为显式函数参数提供的数组(即作为子类jarray).但是如何访问作为字段内的字段的Java(原始)数组jobject?例如,我想操作以下Java对象的字节数组:
class JavaClass {
...
int i;
byte[] a;
}
Run Code Online (Sandbox Code Playgroud)
主程序可能是这样的:
class Test {
public static void main(String[] args) {
JavaClass jc = new JavaClass();
jc.a = new byte[100];
...
process(jc);
}
public static native void process(JavaClass jc);
}
Run Code Online (Sandbox Code Playgroud)
相应的C++方面将是:
JNIEXPORT void JNICALL Java_Test_process(JNIEnv * env, jclass c, jobject jc) {
jclass jcClass = env->GetObjectClass(jc);
jfieldID iId = env->GetFieldID(jcClass, "i", "I");
// This way we can get and set the "i" field. …Run Code Online (Sandbox Code Playgroud) 我有两个罐A和B,其中A取决于B.
Jar B有一个类:
@ApplicationScoped
public class MyManagedBean {
private String user;
public MyManagedBean(){
//Constructor necesary for CDI
}
@Inject
public MyManagedBean(@Named("user") String user){
this.user = user;
}
...
}
Run Code Online (Sandbox Code Playgroud)
Jar A(更确切地说,一个EJB jar)有一个bean:
@ApplicationScoped
public class AnotherManagedBean {
public AnotherManagedBean(){
//Constructor necesary for CDI
}
@Inject
public AnotherManagedBean(MyManagedBean bean){
...
}
}
Run Code Online (Sandbox Code Playgroud)
以及带有@Produces方法的配置bean:
@ApplicationScoped
public class ConfigurationBean {
public ConfigurationBean(){
//Constructor necesary for CDI
}
@Produces
@Named("user")
public String getUser(){
return "myUser";
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用两个Jars部署EAR时,我遇到了这个异常:
SEVERE: Exception while loading the app …Run Code Online (Sandbox Code Playgroud) 我有一个关于日期管理的问题,以毫秒为单位.我理解需要使用TIMESTAMP来存储毫秒:
@Temporal(TIMESTAMP)
@Column(name="DATE_COLUMN", nullable = false)
@Override public java.util.Date getDate() { return this.date; }
Run Code Online (Sandbox Code Playgroud)
但是如果我不能将这个日期与java.util.Date的另一个实例进行比较,除非我注意equals()调用的顺序,因为this.dateinstance是一个java.sql.Timestamp.如何从JPA获取java.util.Date?因为来自JPA的日期,即使方法签名是java.util.Date,实际上也是java.sql.Timestamp的一个实例.
java.util.Date newDate = new Date(this.date.getTime());
this.date.equals(newDate) == false
newDate.equals(this.date) == true
Run Code Online (Sandbox Code Playgroud)
我试图在持久化类中修改我的方法:
@Override
public Date getDate() {
return this.date == null ? null : new Date(this.date.getTime());
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但是大量数据效率不高.
还有其他选择:
我可以修改我的持久化类的设计,@PostLoad以便在我检索它之后从持久的日期创建一个java.util.Date.
我想知道我是否无法使用ClassTransformer?
你有没有遇到过这个问题?我不正确的是什么?处理这个问题的最佳方法是什么?
我想知道java类的最大大小是多少.如此处所示http://docs.oracle.com/javase/specs/jvms/se5.0/html/ClassFile.doc.html#1546在Code属性结构中,代码长度指定为4字节,因此它是一大堆.我不明白的是异常表的pc属性是2个字节.如果代码长度超过2个字节但异常表只能解决2个字节,它怎么能工作?
目前我正在尝试将无状态EJB注入到Jboss 6 AS Final上的CDI管理控制器中.控制器在上下文中管理,可从JSF页面访问.如果我注入无状态bean @EJB正在工作.如果我注入无状态EJB,@Inject我会得到以下异常:
我的控制器:
@Named("TestController")
public class TestController {
@Inject
private TestManagerLocal myTestManager;
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的无状态豆:
@SuppressWarnings("unchecked")
@Stateless
public class TestManagerBean implements TestManagerLocal {
@PersistenceContext
private EntityManager em;
...
}
Run Code Online (Sandbox Code Playgroud)
Bean的接口使用@Local注释.
如果我尝试调用myTestManager,我会得到以下异常:
WELD-000079在JNDI中找不到EJB:class de.crud.org $ jboss $ weld $ bean-jboss $ classloader:id ="vfs:$$$ usr $ local $ jboss $ server $ default $ deploy $ test $耳朵"-SessionBean-TestManagerBean _ $$ _ WeldProxy
多谢.
我正在尝试用VC10编译VC6项目...我用set_intersection获取了一个错误C2678:我写了一些例子来理解.任何人都可以解释如何编译这个片段?
#include <vector>
#include <algorithm>
#include <iostream>
#include <set>
#include <string>
int main( )
{
using namespace std;
typedef set<string> MyType;
MyType in1, in2, out;
MyType::iterator out_iter(out.begin());
set_intersection(in1.begin(),in1.end(), in2.begin(), in2.end(), out_iter);
}
Run Code Online (Sandbox Code Playgroud)
输出 :
c:\ program files\microsoft visual\studio 10.0\vc\include\algorithm(4494):错误C2678:'='binary:没有运算符定义,它采用类型为'const std :: basic_string <_Elem的左手操作数, _Traits,_Ax>'(或没有可接受的转换)
如果我用一个std::vector而不是std::set编译成功.可)
我正在尝试将Guava用于我的项目,并且在启动JBoss时有很多警告:
WARN [ClassLoaderManager] Unexpected error during load of:com.google.common.base.Equivalences$Equals: java.lang.IncompatibleClassChangeError: class com.google.common.base.Equivalences$Equals has interface com.google.common.base.Equivalence as super class
WARN [ClassLoaderManager] Unexpected error during load of:com.google.common.base.FunctionalEquivalence: java.lang.IncompatibleClassChangeError: class com.google.common.base.FunctionalEquivalence has interface com.google.common.base.Equivalence as super class
WARN [ClassLoaderManager] Unexpected error during load of:com.google.common.collect.AbstractMapBasedMultiset$1$1: java.lang.IllegalAccessError: class com.google.common.collect.AbstractMapBasedMultiset$1$1 cannot access its superclass com.google.common.collect.Multisets$AbstractEntry
[...]
Run Code Online (Sandbox Code Playgroud)
根据我的研究,似乎与旧的Google Collection不兼容.来自community.jboss.org的这个帖子建议使用jboss-scanning.xml.我没有更改,JBoss文档指定此文件用于过滤注释...
你有没遇到过这个问题?
你能建议一个解决方案吗?
java ×3
cdi ×2
jboss-weld ×2
class ×1
datetime ×1
ear ×1
ejb-3.1 ×1
exception ×1
geospatial ×1
guava ×1
jar ×1
jboss6.x ×1
jpa ×1
jts ×1
persistence ×1
stl ×1
visual-c++ ×1