Java Applet java.lang.NullPointerException

时间:2014-07-11 15:50:20

标签: java applet

我尝试使用Java Applet在ASP.NET页面中为我的串口发送字节。

在cshtml中,我使用javascript调用我的applet

<pre><script type="text/javascript">
        var attributes = {
            code: 'Principal.class', archive: 'Applet.jar', width: 325, height: 325

        };
        var parameters = { fontSize: 16 };
        var version = '1.7';
        deployJava.runApplet(attributes, parameters, version);

        </script></pre>

在Internet Explorer中运行时出现此错误:

  

Principal的java.lang.NullPointerException。(Principal.java:99)     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native   方法)at   sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown   来自java.lang.reflect.Constructor.newInstance(未知来源)     在java.lang.Class.newInstance(未知来源)at   sun.applet.AppletPanel.createApplet(未知来源)at   sun.plugin.AppletViewer.createApplet(未知来源)at   sun.applet.AppletPanel.runLoader(未知来源)at   sun.applet.AppletPanel.run(未知来源)at   java.lang.Thread.run(未知来源)

我的小程序:

private static final long serialVersionUID = 1L;

    static CommPortIdentifier portId1;
    static CommPortIdentifier portId2;  
    InputStream inputStream;
    OutputStream outputStream;
    SerialPort serialPort1, serialPort2;

    protected String divertCode = "10";
    static String TimeStamp;

    @Override
    public void serialEvent(SerialPortEvent arg0) {}

    public static void main (String[] args){
        try {

            portId1 = CommPortIdentifier.getPortIdentifier("COM11");
            //portId2 = CommPortIdentifier.getPortIdentifier("COM9");

            Principal reader = new Principal();             
        } catch (NoSuchPortException e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
    }

    public Principal(){
        try {
            TimeStamp = new java.util.Date().toString();
            serialPort1  = (SerialPort) portId1.open("Principal",2000);
        //  System.out.println(TimeStamp+":"+portId1.getName()+"porta aberta");

            //serialPort2  = (SerialPort) portId2.open("Principal",2000);
            //System.out.println(TimeStamp+":"+portId2.getName()+"porta aberta");                       
            try {
                serialPort1.setSerialPortParams(115200, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
                serialPort1.setDTR(false);
                serialPort1.setRTS(false);
                try {
                    outputStream = serialPort1.getOutputStream();
                    String texto = "Testando envio \n";
                    byte[] envio = texto.getBytes();
                    outputStream.write(envio);
                } catch (IOException e) {                   
                    e.printStackTrace();
                }
            } catch (UnsupportedCommOperationException e) {
                e.printStackTrace();
            }
        } catch (PortInUseException e) {

        }

    }

我的网址已经列为受信任的java,我的applet是自我认证的 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我已经知道这个问题了。在我的应用程序中不是我的逻辑!我告诉过这个......我不像猴子一样编程!代码完全像java应用程序。问题是我在浏览器中使用相同的代码,如applet。要工作相同的代码我只需要在打开端口之前加载驱动程序。在java应用程序中我不需要。谢谢你的2个否定。我在寻找所有谷歌之前先找问题,所以很多人都有同样的问题。我不明白为什么你这样回答我。不像看起来我怀疑那么明显:)

所以,如果其他人有同样的问题(为什么代码在java应用程序中工作而且不像applet那样工作)答案很简单。 在getportIdentifier之前添加代码:

String driverName =“com.sun.comm.Win32Driver”;

javax.comm.CommDriver driver = null;

driver =(javax.comm.CommDriver)Class.forName(driverName).newInstance();

driver.initialize();

在java应用程序中不需要这样做,但是像applet一样,你必须这样做。 因此,在您复制文件(javax.comm.proprieties等..)并签署您的applet后,此代码可以正常工作(我只是总结了最后一个代码)

CommPortIdentifier portId;

        String defaultPort = "COM1"; 
        String driverName = "com.sun.comm.Win32Driver";
        javax.comm.CommDriver driver = null;

        try 
        {
            driver = (javax.comm.CommDriver) Class.forName(driverName).newInstance();
            driver.initialize();

            portId1 = CommPortIdentifier.getPortIdentifier("COM1");
            serialPort1 = (SerialPort) portId1.open("Principal", 2000);
            serialPort1.setSerialPortParams(115200,SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
            outputStream = serialPort1.getOutputStream();
            String texto = "Testando envio \n";
            byte[] envio = texto.getBytes();
            outputStream.write(envio);
        } 
        catch (Exception e) {System.err.println (e);}

感谢没有人:*