-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
39 lines (33 loc) · 896 Bytes
/
main.go
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
37
38
39
package main
import (
"fmt"
"strings"
"github.com/Frederick-S/jvmgo/classpath"
"github.com/Frederick-S/jvmgo/runtime_data_area/heap"
)
func main() {
// cmd := parseCmd()
cmd := &Cmd{
jrePath: "/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/jre",
className: "./java/ParseIntTest",
}
if cmd.showVersion {
fmt.Println("Version 0.0.1")
} else if cmd.showHelp || cmd.className == "" {
printCmdUsage()
} else {
startJVM(cmd)
}
}
func startJVM(cmd *Cmd) {
classFinder := classpath.Parse(cmd.jrePath, cmd.classpath)
classLoader := heap.NewClassLoader(classFinder)
className := strings.Replace(cmd.className, ".", "/", -1)
mainClass := classLoader.LoadClass(className)
mainMethod := mainClass.GetMainMethod()
if mainMethod != nil {
interpret(mainMethod, cmd.arguments)
} else {
fmt.Printf("Main method not found in class %s\n", cmd.className)
}
}