3

作为参考,我之前问过一个关于将我的 Java 应用程序本质上转换为小程序的错误的问题。好吧,有人建议我尝试 JavaWebStart,但我仍然遇到这种方式的问题,所以我决定创建一个新问题。

这是我引用的问题:applet 中的 java.lang.reflect.invocationtargetexception 错误

我假设我假设我有某种结构错误,关于如何设置 JavaWebStart 应用程序,因为我已经在本地测试了我的代码作为 jar 文件并且运行它没有错误。

这是一个示例页面: http: //fogest.com/java_example/

4

1 回答 1

3

正如我们在上一个问题中讨论的那样,您的代码似乎确实有。main(String[] args)因此,它可能就像更改一样简单:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://fogest.com/java_example" href="">
    <information>
        <title>Launch applet with Web Start</title>
        <vendor>Foo Bar Inc.</vendor>
        <offline-allowed/>
    </information>
    <resources>
        <j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="physics.jar" main="true" />
    </resources>
    <applet-desc
         name="Physics" main-class="main.MainGame"
         width="300" height="200">
    </applet-desc>
  <update check="background"/>
</jnlp>

类似于:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://fogest.com/java_example" href="">
    <information>
        <title>Launch applet with Web Start</title>
        <vendor>Foo Bar Inc.</vendor>
        <offline-allowed/>
    </information>
    <resources>
        <j2se version="1.5+" href="http://java.sun.com/products/autodl/j2se"/>
        <jar href="physics.jar" main="true" />
    </resources>
    <application-desc main-class="main.MainGame">
    </application-desc>
  <update check="background"/>
</jnlp>

笔记

  1. 我没有验证任何一个 JNLP,但你应该。我写JaNeLA 就是为了做到这一点。
  2. Swing GUI 应该在 EDT 上创建和更新。有关更多详细信息,请参阅Swing 中的并发(尤其是关于“初始线程”的部分)。
  3. 这是一个基于框架的SSCCE。

import java.awt.*;
import javax.swing.*;

public class MainGame {
    public static final String NAME = "Physics - Projectile Motion Example";
    public static final int HEIGHT = 160;
    public static final int WIDTH = HEIGHT * 16 / 9;
    public static final int SCALE = 4;

    public MainGame() {
        run();
    }

    public void run() {
        JFrame frame = new JFrame(MainGame.NAME);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());


        JPanel options = new JPanel();
        options.add(new JLabel("Options"));
        JPanel game = new JPanel();
        game.add(new JLabel("Game"));

        frame.setSize(new Dimension ( WIDTH * SCALE, HEIGHT * SCALE ));

        frame.add(game, BorderLayout.CENTER);
        frame.add(options, BorderLayout.SOUTH);
        frame.setLocationRelativeTo(null);
        frame.setResizable(false);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new MainGame();
    }
}
于 2013-06-17T05:40:54.037 回答