我尝试使用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是自我认证的 有人可以帮帮我吗?
答案 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);}
感谢没有人:*