在命令行下运行swing图形化应用

  • A+
所属分类:安全开发

有时候我们会遇到只有一个命令行没有图形化界面的情况,此时无法运行图形化工具,即使运行也看不到界面。

Jetbrains在今年3月开源了他们远程IDE项目Jetbrains Projector,这个项目本身的目的是为了用户可以在服务器上运行Jetbrans家的IDE,然后远程使用。但是,能够被Projector运行起来的不仅仅限于自己的IDE们——所有基于swing架构开发的Java应用都可以在服务端运行。

把应用运行在服务端的好处是:

  • 本地无需安装Java,而是通过浏览器访问远程图形化界面
  • 更加安全,整个Java应用可以运行在虚拟机、容器等任何地方
  • 穿透网络

本文介绍一下如何使用Projector运行IDEA,和任意用swing开发的图形化应用。

运行Jetbrains IDEA

我们先尝试一下运行官方的应用Jetbrains IDEA,官方提供了Docker封装好的镜像:

docker pull registry.jetbrains.team/p/prj/containers/projector-idea-c

拉取下来镜像后,直接运行,并将8887端口映射出来:

docker run -it -d --name ide -p 8887:8887 registry.jetbrains.team/p/prj/containers/projector-idea-c

然后访问8887端口,即可访问远程IDE:

在命令行下运行swing图形化应用


运行哥斯拉Webshell管理工具

Projector当然不止能运行IDEA,而是支持所有swing开发的应用。

我们以哥斯拉(Godzilla)为例,这次直接在Linux下运行。

首先,由于Projector刚开源出来,还不是很成熟,现在仅支持Java 11作为运行环境。所以,我们先安装一下OpenJDK 11:

apt-get install openjdk-11-jre

再下载Projector:https://github.com/JetBrains/projector-server/releases/tag/agent-v1.2.3,下载解压后,会有一个lib/目录,其中放了一些jar包。

然后我们还需要知道哥斯拉的主类。我们用压缩包的方式打开哥斯拉的jar包,查看META-INF/MANIFEST.MF文件,获取其中的Main-Class值,这个就是主类:

在命令行下运行swing图形化应用

准备齐全后,我们运行:

/usr/lib/jvm/java-11-openjdk-amd64/bin/java 
-classpath "Godzilla-V2.96.jar:lib/*" 
-Dorg.jetbrains.projector.server.classToLaunch=core.ui.MainActivity 
org.jetbrains.projector.server.ProjectorLauncher

这个运行语句很简单,将哥斯拉Jar包本体,和下载的lib目录下所有的jar包作为classpath,然后设置org.jetbrains.projector.server.classToLaunch为我们要运行的哥斯拉的主类。

成功运行,然后访问8887端口,即可查看到哥斯拉的界面,正常使用没有任何问题:

在命令行下运行swing图形化应用

Docker镜像

我制作了一个简单的Docker镜像(地址:https://github.com/phith0n/projector-runner),可以传入jar包的路径并将其用Projector运行在容器内:

docker run -it --rm --name projector 
    -p 8887:8887 
    -v /path/to/swing-gui-application.jar:/opt/projector/swing-gui-application.jar 
    tuwen/projector swing-gui-application.jar


在命令行下运行swing图形化应用

喜欢这篇文章,点个在看再走吧


本文始发于微信公众号(代码审计):在命令行下运行swing图形化应用

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: