-3

ユーザーのMACアドレスを取得し、MD5に変換してjavascript関数に送信するJAVAアプレットを作成しようとしています。

この MD5 を他の入力データと共にフォームに追加するつもりです。

これまでのところ、MAC アドレスを取得して MD5 に正常に変換できました。私ができなかったのは、それを私のjavascript関数に渡すことです。

これは私のHTMLコードです:

<body>
<script type="text/javascript">
        function dohash(hash) { alert(hash); }
    </script>
<APPLET code="start.class" width="200" height="200"></APPLET>
</body>
</html>

これはJAVAコードです:

import netscape.javascript.JSObject;
import java.applet.*;
import java.security.*;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.math.BigInteger;

public class start extends Applet {

    private static final long serialVersionUID = 1L;
    JSObject win;

    public void main() {
        win = (JSObject)JSObject.getWindow(this);
    }

    public void init() {
        InetAddress ip;
        String hashtext = "a";
        try {
            ip = InetAddress.getLocalHost();

            NetworkInterface network = NetworkInterface.getByInetAddress(ip);

            byte[] mac = network.getHardwareAddress();

            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < mac.length; i++) {
                sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));    
            }

                    try {
                            String plaintext = sb.toString();
                            MessageDigest m = MessageDigest.getInstance("MD5");
                            m.reset();
                            m.update(plaintext.getBytes());
                            byte[] digest = m.digest();
                            BigInteger bigInt = new BigInteger(1,digest);
                            hashtext = bigInt.toString(16);
                            while(hashtext.length() < 32 ){
                                hashtext = "0"+hashtext;
                            }
                    } catch (NoSuchAlgorithmException e) {
                            e.printStackTrace();
                    }

                    try {
                        win.eval("alert('123');");
                    } catch (NullPointerException e) {
                            e.printStackTrace();
                    }

        } catch (UnknownHostException e) {

            e.printStackTrace();

        } catch (SocketException e){

            e.printStackTrace();

        }

    }

}

これは、Eclipse のコンソールでの応答です。

java.lang.NullPointerException
    at start.init(start.java:50)
    at sun.applet.AppletPanel.run(AppletPanel.java:435)
    at java.lang.Thread.run(Thread.java:744)
4

1 に答える 1

5

mainアプレットによって自動的に呼び出されることはありません。メソッドでwin参照を割り当てますinit

public void init() {
    win = (JSObject)JSObject.getWindow(this);
    ...
}

読む:アプレットのライフサイクル

于 2013-10-30T01:03:29.543 に答える