使一个JNLP Web-Start小程序可调整大小

3
我们有一个小程序用于浏览器中运行应用程序,但我们也提供了JNLP Web启动选项。当Web启动窗口启动时,它是不可调整大小或最大化的,我们希望能够实现这一点。
我最初认为这只是在JNLP文件中简单的设置,但现在我不确定了。我应该如何处理这个问题?
3个回答

2
在JNLP中没有设置可调整大小的小程序查看器(这是JWS用于显示浮动小程序的方式)。
然而,通过一些技巧可能会让你达成目标。我记得很久以前做过类似的事情。我想从记忆中,它基本上涉及到使用getParent()在一个循环中直到null,最后一个组件之前是一个JFrame。一旦你有了对框架的引用,你就可以调用setResizable(true)
实际上,(考虑)你还可以研究一下JComponent.getTopLevelAncestor()来获取对根框架的引用。据我所知,当我尝试进行实验时,该方法不存在。(是的,那时候真的很久很久以前了。)
当然,一个更好的策略是创建一个混合应用程序/小程序。将小程序嵌入到浏览器中,并通过JWS启动框架。这提供了对GUI的完全控制。

这个问题可能看起来很奇怪,但是你能从通用的Java代码中获取Applet实例吗?我们的applet类实际上是一个第三方库,它将我们的应用程序作为一种插件进行加载。该applet会读取我们的主类的名称作为<param>并对其进行实例化,而不传递Applet实例给我们。 - Mr. Boy
第三方小程序通过参数传递我们的“app”类的名称,并通过反射实例化。因此,在游戏中,我们使用特殊的游戏UI框架,因此不会传递任何Java GUI对象。 - Mr. Boy
GUI类完全抽象出了AWT/SWT...它们直接从Object派生。getWindows()是首选路线,但我们支持Java 5,并且已经记录为6个特性。 - Mr. Boy
我们支持Java 5。在这种情况下,请查看Frame.getFrames()。它是1.2+。 - Andrew Thompson

1

这是我在init方法末尾添加的一段代码,使我的小程序可以调整大小。我的类继承了JApplet

Window window = SwingUtilities.windowForComponent(this);
if (window instanceof JFrame) {
    JFrame frame = (JFrame) window;
    if (!frame.isResizable()) {
        frame.setResizable(true);
    }
}

希望这有所帮助。

0

尽管已经到了2022年,我仍然面临着这个问题。

不,我不是开发团队的一员,也没有访问源代码的权限。

我的解决方法是使用shell脚本,在每次下载JNLP时更改JNLP文件中的窗口大小以适应自己的需求。

它不能调整大小,但当然我可以通过shell脚本更改窗口大小并重新启动JNLP应用程序。

TMPFILE=/tmp/app-resized.jnlp

cat ~/Downloads/app.jnlp | sed -e 's/width="1470" height="1250"/width="1024" height="768"/' > $TMPFILE
rm ~/Downloads/app.jnlp


javaws $TMPFILE 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接