1

我是 Java 新手。我无法在 html 页面上部署任何小程序并不断收到 InvocationTargetException。为了说明这一点,这里有一个例子:

我的小程序只有一个有主的类。所有代码均由 NetBeans 生成,GUI 仅包含一个按钮:

package javaapplication;

public class NewJFrame extends javax.swing.JFrame {
    public NewJFrame() {
        initComponents();
    }

    @SuppressWarnings("unchecked")


   // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1)
                .addContainerGap(317, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jButton1)
                .addContainerGap(266, Short.MAX_VALUE))
        );

        pack();
    }
    public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new NewJFrame().setVisible(true);
        }
    });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    // End of variables declaration      
}

它在 NetBeans 中顺利编译和运行。现在我清理并构建 .jar 文件。这是 MANIFEST.MF,对我来说看起来不错:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.4
Created-By: 1.7.0_10-b18 (Oracle Corporation)
Class-Path: 
X-COMMENT: Main-Class will be added automatically by build
Main-Class: javaapplication.NewJFrame

这是我的 index.html:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <applet archive="JavaApplication.jar" width="300" height="300" code="javaapplication.NewJFrame"/>

    </body>

</html>

我已将它们放在同一目录中并正确设置了权限。现在,当我尝试打开放置在服务器上的 index.html 时,它会在最新版本的 Firefox 和 Chrome 上给出 InvocationTargetException。

我尝试了许多不同的方法,例如创建另一个具有 main 的类,或者使用 Jnlp 但无济于事。任何帮助是极大的赞赏。

4

1 回答 1

2

我在您的代码中看不到小程序。

package javaapplication;

public class NewJFrame extends javax.swing.JFrame {
    public NewJFrame() {
        initComponents();
    }
[...]

从头开始创建 Java 项目。(网豆)

  • 选择文件 > 新建项目 (Ctrl-Shift-N) (MyTestApplet)。
  • 在类别下,选择 Java。
  • 选择项目下的 Java 类库。
  • 单击完成。

  • 创建小程序源文件

  • 在 Projects 窗口中右键单击 MyTestApplet 项目节点并选择 New > Other (Ctrl-N)。
  • 在类别下,选择 Java。
  • 选择 Swing GUI 表单 > JApplet 表单。
  • 点击下一步。
  • 在类名下,键入NewJApplet
  • 在包下,键入javaapplication
  • 单击完成。

IDE 在指定的包中创建小程序源文件。小程序源文件打开,GUI 编辑器打开。

  • 将 Button 拖到 Gui。

源 NewJapplet.java 应该类似于:

package javaapplication;

public class NewJApplet extends javax.swing.JApplet {


    @Override
    public void init() {

        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewJApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewJApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }


    @SuppressWarnings("unchecked")

    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        jButton1.setText("jButton1");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(182, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addGap(139, 139, 139))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(43, 43, 43)
                .addComponent(jButton1)
                .addContainerGap(232, Short.MAX_VALUE))
        );
    }
    private javax.swing.JButton jButton1;

}
  • Build

在 dist 文件夹中现在是MyTestApplet.jar

  • 将 .jar 复制到服务器的文件夹中MyTestApplet
  • 将以下 .html 复制到服务器,相同的文件夹MyTestApplet

使用这个 html 文件。

  • 更改 classid="clsid:CAFEEFAC- 0016 -0000-0000-ABCDEFFEDCBA" width="300" height="300"> 指向您的 Java 版本
  • 0017

AppletPage.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="en-US">
  <head>
    <title>Applet Page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  </head>
  <body>
    <h1>Applet Demo</h1>
    <h2>This applet has been deployed with the object tag</h2>
    <object 
    classid="clsid:CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA" width="300" height="300">
    <PARAM name="code" value="javaapplication.NewJApplet">
    <PARAM name="archive"  value="MyTestApplet.jar">
    <comment>
      <embed code="javaapplication.NewJApplet.class"
             width="300"
             height="300"
             archive="MyTestApplet.jar"
             type="application/x-java-applet">
        <noembed>
          No Java Support.
        </noembed>
      </embed>
    </comment>
  </object>

  </body>
</html>
  • 在浏览器中输入网址:http://localhost/MyTestApplet/AppletPage.html

瞧:

在此处输入图像描述

希望这可以帮助。

于 2013-03-24T06:27:12.573 回答