本文整理汇总了Golang中github.com/zxh0/jvm/go/jvmgo/jvm/rtda.Frame.Thread方法的典型用法代码示例。如果您正苦于以下问题:Golang Frame.Thread方法的具体用法?Golang Frame.Thread怎么用?Golang Frame.Thread使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/zxh0/jvm/go/jvmgo/jvm/rtda.Frame
的用法示例。
在下文中一共展示了Frame.Thread方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: psi_socketConnect
// native void socketConnect(InetAddress address, int port, int timeout)
// throws IOException;
func psi_socketConnect(frame *rtda.Frame) {
vars := frame.LocalVars()
this := vars.GetThis()
address := vars.GetRef(1)
port := vars.Get(2)
holder := address.GetFieldValue("holder", "Ljava/net/InetAddress$InetAddressHolder;").(*rtc.Obj)
//fmt.Println(address.Class().GetInstanceMethod("getHostAddress", "()Ljava/lang/String;").NativeMethod())
add := holder.GetFieldValue("address", "I").(int32)
b := make([]byte, 4)
binary.BigEndian.PutUint32(b, uint32(add))
laddr := fmt.Sprintf("%d.%d.%d.%d:%d", b[0], b[1], b[2], b[3], port)
conn, err := net.Dial("tcp", laddr)
if err != nil {
frame.Thread().ThrowIOException(err.Error())
}
//TODO what ? timeout how to implement ?
_timeout := vars.GetInt(3)
if _timeout > 0 {
conn.SetDeadline(time.Now().Add(time.Duration(_timeout) * time.Millisecond))
}
fdObj := this.GetFieldValue("fd", "Ljava/io/FileDescriptor;").(*rtc.Obj)
fdObj.SetExtra(conn)
}
示例2: Execute
func (self *areturn) Execute(frame *rtda.Frame) {
thread := frame.Thread()
currentFrame := thread.PopFrame()
invokerFrame := thread.TopFrame()
ref := currentFrame.OperandStack().PopRef()
invokerFrame.OperandStack().PushRef(ref)
}
示例3: raf_open
// private native void open(String name, int mode) throws FileNotFoundException;
// (Ljava/lang/String;)V
func raf_open(frame *rtda.Frame) {
vars := frame.LocalVars()
this := vars.GetThis()
name := vars.GetRef(1)
mode := vars.GetInt(2) //flag
flag := 0
if mode&1 > 0 {
flag |= os.O_RDONLY
}
//write
if mode&2 > 0 {
flag |= os.O_RDWR | os.O_CREATE
}
if mode&4 > 0 {
flag |= os.O_SYNC | os.O_CREATE
}
if mode&8 > 0 {
//TODO:O_DSYNC
flag |= os.O_SYNC | os.O_CREATE
}
goName := rtda.GoString(name)
if goFile, err := os.OpenFile(goName, flag, 0660); err != nil {
frame.Thread().ThrowFileNotFoundException(goName)
} else {
this.SetExtra(goFile)
}
}
示例4: raf_setLength
// public native void setLength(long newLength) throws IOException;
// (J)V
func raf_setLength(frame *rtda.Frame) {
vars := frame.LocalVars()
this := vars.GetThis()
//length := vars.GetLong(1)
goFile := this.Extra().(*os.File)
cur, _ := goFile.Seek(0, os.SEEK_CUR)
//TODO
//How do set file length in Go ?
panic("native method not implement! RandomAccessFile.setLength")
var newLength int64
newLength = 0
if cur > newLength {
if _, err := goFile.Seek(0, os.SEEK_END); err != nil {
frame.Thread().ThrowIOException("setLength failed")
}
} else {
if _, err := goFile.Seek(cur, os.SEEK_SET); err != nil {
frame.Thread().ThrowIOException("setLength failed")
}
}
}
示例5: getCallerClass
// public static native Class<?> getCallerClass(int i);
// (I)Ljava/lang/Class;
func getCallerClass(frame *rtda.Frame) {
// top0 is sun/reflect/Reflection
// top1 is the caller of getCallerClass()
// top2 is the caller of method
callerFrame := frame.Thread().TopFrameN(2)
callerClass := callerFrame.Method().Class().JClass()
frame.OperandStack().PushRef(callerClass)
}
示例6: raf_close0
// private native void close0() throws IOException;
// ()V
func raf_close0(frame *rtda.Frame) {
vars := frame.LocalVars()
this := vars.GetThis()
goFile := this.Extra().(*os.File)
if err := goFile.Close(); err != nil {
frame.Thread().ThrowIOException(err.Error())
}
}
示例7: Execute
func (self *monitorenter) Execute(frame *rtda.Frame) {
thread := frame.Thread()
ref := frame.OperandStack().PopRef()
if ref == nil {
frame.RevertNextPC()
thread.ThrowNPE()
} else {
ref.Monitor().Enter(thread)
}
}
示例8: doPrivileged
// @CallerSensitive
// public static native <T> T doPrivileged(PrivilegedAction<T> action);
// (Ljava/security/PrivilegedAction;)Ljava/lang/Object;
func doPrivileged(frame *rtda.Frame) {
vars := frame.LocalVars()
action := vars.GetRef(0)
stack := frame.OperandStack()
stack.PushRef(action)
method := action.Class().GetInstanceMethod("run", "()Ljava/lang/Object;") // todo
frame.Thread().InvokeMethod(method)
}
示例9: _checkArrayAndIndex
func _checkArrayAndIndex(frame *rtda.Frame, arrRef *rtc.Obj, index int32) bool {
if arrRef == nil {
frame.Thread().ThrowNPE()
return false
}
if index < 0 || index >= rtc.ArrayLength(arrRef) {
frame.Thread().ThrowArrayIndexOutOfBoundsException(index)
return false
}
return true
}
示例10: Execute
func (self *newarray) Execute(frame *rtda.Frame) {
stack := frame.OperandStack()
count := stack.PopInt()
if count < 0 {
frame.Thread().ThrowNegativeArraySizeException()
return
}
arr := rtc.NewPrimitiveArray(self.atype, uint(count))
stack.PushRef(arr)
}
示例11: _callValueOf
func _callValueOf(frame *rtda.Frame, primitiveDescriptor, wrapperClassName string) {
wrapperClass := rtc.BootLoader().LoadClass(wrapperClassName)
valueOfDescriptor := "(" + primitiveDescriptor + ")L" + wrapperClassName + ";"
valueOfMethod := wrapperClass.GetStaticMethod("valueOf", valueOfDescriptor)
frame.Thread().InvokeMethod(valueOfMethod)
// init wrapper class
if wrapperClass.InitializationNotStarted() {
frame.Thread().InitClass(wrapperClass)
}
}
示例12: Execute
func (self *invokespecial) Execute(frame *rtda.Frame) {
cp := frame.Method().Class().ConstantPool()
k := cp.GetConstant(self.index)
if kMethodRef, ok := k.(*rtc.ConstantMethodref); ok {
method := kMethodRef.SpecialMethod()
frame.Thread().InvokeMethod(method)
} else {
method := k.(*rtc.ConstantInterfaceMethodref).SpecialMethod()
frame.Thread().InvokeMethod(method)
}
}
示例13: Execute
func (self *irem) Execute(frame *rtda.Frame) {
stack := frame.OperandStack()
v2 := stack.PopInt()
v1 := stack.PopInt()
if v2 == 0 {
frame.Thread().ThrowDivByZero()
} else {
result := v1 % v2
stack.PushInt(result)
}
}
示例14: raf_write0
// private native void write0(int b) throws IOException;
// (I)V
func raf_write0(frame *rtda.Frame) {
vars := frame.LocalVars()
this := vars.GetThis()
intObj := vars.GetInt(1) // b
goFile := this.Extra().(*os.File)
//b := make([]byte, 4)
//binary.BigEndian.PutUint32(b, uint32(intObj))
if _, err := goFile.Write([]byte{byte(intObj)}); err != nil {
frame.Thread().ThrowIOException(err.Error())
}
}
示例15: Execute
func (self *ldiv) Execute(frame *rtda.Frame) {
stack := frame.OperandStack()
v2 := stack.PopLong()
v1 := stack.PopLong()
if v2 == 0 {
frame.Thread().ThrowDivByZero()
} else {
result := v1 / v2
stack.PushLong(result)
}
}