Java Web Start小程序/应用程序中的InvocationTargetException

时间:2013-06-17 02:01:32

标签: java applet java-web-start invocationtargetexception

作为参考,我之前提出了一个关于错误的问题,主要是将我的Java应用程序转换为applet。好吧,我被建议尝试JavaWebStart,我仍然遇到这种方式的问题,所以我决定创建一个新问题。

以下是我引用的问题:java.lang.reflect.invocationtargetexception error in applet

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

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

1 个答案:

答案 0 :(得分: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更新。有关更多详细信息,请参阅Concurrency in Swing(尤其是“初始线程”部分)。
  3. 这是基于框架的SSCCE。

  4. 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();
        }
    }