Witam!
Mam problem z dodaniem klasy Robot do istniejącej aplikacji obsługującej nasłuch z portu com.Chciałbym by aplikacja zczytywała string z współrzędnymi z portu com i poruszała kursorem po ekranie zgodnie z nimi.Dodałem importy i przykładowy kod robota jednak wyrzuca mi błędy i tu moja prośba o pomoc bo nie wiem co robię źle a potrzebuję to do szkoły jakby ktoś wytłumaczył jak zielonemu tak bym sobie poradził
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* PortSzeregowy.java
*
* Created on 2010-01-28, 08:42:59
*/
package RS232;
import java.io.*;
import gnu.io.*;
import java.util.*;
import javax.swing.UnsupportedLookAndFeelException;
import java.awt.Robot;
import java.awt.AWTException;
/**
*
*/
// konieczna inplementacja -> implements SerialPortEventListener
public class PortSzeregowy extends javax.swing.JFrame implements SerialPortEventListener{
// ----- inicjator klasy (static) - Uwaga ! wykonuje sie jako pierwsza w programie
static {
try { // ten fragment kodu dostosowuje aplikacje do twojego systemu
javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName());
javax.swing.JDialog.setDefaultLookAndFeelDecorated(true); // rysuje ramkę i listwę górną okna
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (UnsupportedLookAndFeelException e) {
throw new RuntimeException(e);
}
}
/** Creates new form PortSzeregowy */
public PortSzeregowy() {
getPorts(); // wyznacz ilość portów RS232
initComponents();
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(portList));
this.setTitle("PortSeregowy"); // tworzy tytul aplikacji
jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
"2400","4800","7200","9600","14400","19200","38400",
"57600","115200","128000"}));
jComboBox1.setSelectedIndex(0);// wybrany port
jComboBox2.setSelectedIndex(3);// wybrana prędkość
jTextArea1.setFocusable(false);// tylko do odczytu
jTextArea1.append(" W tym oknie będzie odbiór danych\n");
jTextArea1.append(">> domyślnie: port COM1, szybkość 9600).\n ");
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jPanel5 = new javax.swing.JPanel();
jButton1 = new javax.swing.JButton();
jPanel6 = new javax.swing.JPanel();
jPanel10 = new javax.swing.JPanel();
jComboBox1 = new javax.swing.JComboBox();
jPanel9 = new javax.swing.JPanel();
jComboBox2 = new javax.swing.JComboBox();
jPanel2 = new javax.swing.JPanel();
jPanel4 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTextArea1 = new javax.swing.JTextArea();
jPanel3 = new javax.swing.JPanel();
jPanel8 = new javax.swing.JPanel();
jTextField1 = new javax.swing.JTextField();
jPanel7 = new javax.swing.JPanel();
jButton2 = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
jPanel1.setPreferredSize(new java.awt.Dimension(10, 100));
jPanel1.setRequestFocusEnabled(false);
jPanel1.setLayout(new java.awt.BorderLayout());
jPanel5.setBorder(javax.swing.BorderFactory.createEmptyBorder(30, 10, 30, 10));
jPanel5.setMinimumSize(new java.awt.Dimension(120, 100));
jPanel5.setPreferredSize(new java.awt.Dimension(120, 100));
jPanel5.setRequestFocusEnabled(false);
jPanel5.setLayout(new java.awt.BorderLayout());
jButton1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
jButton1.setText("Otwórz");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jPanel5.add(jButton1, java.awt.BorderLayout.CENTER);
jPanel1.add(jPanel5, java.awt.BorderLayout.LINE_START);
jPanel6.setBorder(javax.swing.BorderFactory.createEmptyBorder(30, 10, 30, 10));
jPanel6.setLayout(new java.awt.GridLayout(1, 2, 10, 1));
jComboBox1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
jComboBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox1ActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10);
jPanel10.setLayout(jPanel10Layout);
jPanel10Layout.setHorizontalGroup(
jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 140, Short.MAX_VALUE)
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jComboBox1, javax.swing.GroupLayout.Alignment.TRAILING, 0, 140, Short.MAX_VALUE))
);
jPanel10Layout.setVerticalGroup(
jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 40, Short.MAX_VALUE)
.addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jComboBox1, javax.swing.GroupLayout.DEFAULT_SIZE, 40, Short.MAX_VALUE))
);
jPanel6.add(jPanel10);
jComboBox2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
jComboBox2.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
jComboBox2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jComboBox2ActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9);
jPanel9.setLayout(jPanel9Layout);
jPanel9Layout.setHorizontalGroup(
jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 140, Short.MAX_VALUE)
.addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jComboBox2, javax.swing.GroupLayout.Alignment.TRAILING, 0, 140, Short.MAX_VALUE))
);
jPanel9Layout.setVerticalGroup(
jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 40, Short.MAX_VALUE)
.addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jComboBox2, javax.swing.GroupLayout.DEFAULT_SIZE, 40, Short.MAX_VALUE))
);
jPanel6.add(jPanel9);
jPanel1.add(jPanel6, java.awt.BorderLayout.CENTER);
getContentPane().add(jPanel1, java.awt.BorderLayout.NORTH);
jPanel2.setPreferredSize(new java.awt.Dimension(319, 292));
jPanel2.setLayout(new java.awt.BorderLayout());
jPanel4.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
jPanel4.setLayout(new java.awt.BorderLayout());
jTextArea1.setColumns(20);
jTextArea1.setFont(new java.awt.Font("Arial", 0, 14)); // NOI18N
jTextArea1.setRows(5);
jScrollPane1.setViewportView(jTextArea1);
jPanel4.add(jScrollPane1, java.awt.BorderLayout.CENTER);
jPanel2.add(jPanel4, java.awt.BorderLayout.CENTER);
jPanel3.setPreferredSize(new java.awt.Dimension(10, 100));
jPanel3.setLayout(new java.awt.BorderLayout());
jPanel8.setBorder(javax.swing.BorderFactory.createEmptyBorder(40, 40, 40, 40));
jPanel8.setLayout(new java.awt.BorderLayout());
jTextField1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
jTextField1.setHorizontalAlignment(javax.swing.JTextField.CENTER);
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
jPanel8.add(jTextField1, java.awt.BorderLayout.PAGE_END);
jPanel3.add(jPanel8, java.awt.BorderLayout.CENTER);
jPanel7.setBorder(javax.swing.BorderFactory.createEmptyBorder(30, 10, 30, 10));
jPanel7.setPreferredSize(new java.awt.Dimension(120, 20));
jPanel7.setLayout(new java.awt.BorderLayout());
jButton2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
jButton2.setText("Wyślij");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jPanel7.add(jButton2, java.awt.BorderLayout.CENTER);
jPanel3.add(jPanel7, java.awt.BorderLayout.LINE_START);
jPanel2.add(jPanel3, java.awt.BorderLayout.NORTH);
getContentPane().add(jPanel2, java.awt.BorderLayout.CENTER);
pack();
}// </editor-fold>
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
jTextArea1.replaceRange("",0,jTextArea1.getText().length());
// ---------------------------------------------------------------------
if (portIdentifier.isCurrentlyOwned()) {
jButton1.setText("Otwórz");
if (inputStream != null) {
try {
inputStream.close();
System.out.println("zamknięcie strumienia inputStream");
} catch (IOException ex) {
}
}
if (outputStream != null) {
try {
outputStream.close();
System.out.println("zamknięcie strumienia outputStream");
} catch (IOException ex) {
}
}
serialPort.removeEventListener();//usunięcie listenera do obslugi zdarzeń na RS232
if (serialPort != null) {
serialPort.close();
}
System.out.println("zamknięcie portu szeregowego.");
stanPortu = false;
jTextArea1.append(">>Port "+portName+" jest zamknięty.\n");
} else { //-------------------------------------------------------------
jButton1.setText("Zamknij");
portName = (String)jComboBox1.getSelectedItem();
jTextArea1.append(">>Port otwarty: "+portName+" , "+baudRate+"\n");
try {
connect(portName);
System.out.println("Uwaga! port " +portName+" otwarty.");
}
catch ( Exception e ) {
}
try {
serialPort.addEventListener(this); //inicjalizacja listenera do obslugi zdarzeń na RS232
} catch (TooManyListenersException ex) {
}
// ---------------------------------------
serialPort.notifyOnDataAvailable(true); // aktywacja znacznika DATA_AVAILABLE (odczyt z portu)
// ---------------------------------------
jTextArea1.append(">>Port jest otwarty !!!.\n");
}
System.out.println("koniec funkcji Start/Stop portu");
}
private void formWindowClosing(java.awt.event.WindowEvent evt) {
//jeśli port otwarty to go zamknij
if (portIdentifier.isCurrentlyOwned()) {
if (inputStream != null)
try {
inputStream.close();
System.out.println("zamknięcie strumienia inputStream");
} catch (IOException ex) {
ex.printStackTrace();
}
if (outputStream != null)
try {
outputStream.close();
System.out.println("zamknięcie strumienia outputStream");
} catch (IOException ex) {
ex.printStackTrace();
}
serialPort.removeEventListener();//usunięcie listenera do obslugi zdarzeń na RS232
if (serialPort != null) serialPort.close();
stanPortu = false;
System.out.println("zamknięcie portu szeregowego.");
}
}
private void jComboBox1ActionPerformed(java.awt.event.ActionEvent evt) {
if (stanPortu == true) {
jTextArea1.append("Musisz zamknąć port.\n");
}
else {
portName = (String)jComboBox1.getSelectedItem();
}
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
String text = jTextField1.getText();
jTextArea1.append(">>"+text + "\n");
jTextField1.selectAll();
zapiszDoPortu(text);
}
private void jComboBox2ActionPerformed(java.awt.event.ActionEvent evt) {
if (stanPortu == true) {
jTextArea1.append("Musisz zamknąć port.\n");
}
else {
baudRate = Integer.valueOf((String)jComboBox2.getSelectedItem()).intValue();
}
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new PortSzeregowy().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JComboBox jComboBox1;
private javax.swing.JComboBox jComboBox2;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel10;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JPanel jPanel5;
private javax.swing.JPanel jPanel6;
private javax.swing.JPanel jPanel7;
private javax.swing.JPanel jPanel8;
private javax.swing.JPanel jPanel9;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JTextArea jTextArea1;
private javax.swing.JTextField jTextField1;
// End of variables declaration
private CommPortIdentifier portIdentifier = null;
private SerialPort serialPort;
private InputStream inputStream;
private OutputStream outputStream;
private int baudRate; // ustala szybkość transmisji
private String[] portList;
private String portName;
private boolean stanPortu = false;// port zamknięty
//------------------------------------------------------------------------------
private void getPorts() {
Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();
String[] tempPortList = new String[20];
int numports = -1;
while ( portEnum.hasMoreElements() )
{
portIdentifier = (CommPortIdentifier) portEnum.nextElement();
numports++;
tempPortList[numports]=portIdentifier.getName();
}
portList = new String[numports];
for (int i = 0; i < numports; i++) {
portList[i] = tempPortList[i];
}
}
void connect(String portName) throws Exception
{
portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
if ( portIdentifier.isCurrentlyOwned() ) {
System.out.println("Error: Port is currently in use");
}
else {
CommPort commPort;
commPort = portIdentifier.open(this.getTitle(),2000);
serialPort = (SerialPort) commPort;
// ustawiene parametrów połaczenia
// domyślnie -> 9600, 8, 1, N
serialPort.setSerialPortParams(baudRate,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
inputStream = serialPort.getInputStream(); //inicjalizacja strumienia wejsciowego
outputStream = serialPort.getOutputStream(); //inicjalizacja strumienia wyjsciowego
stanPortu = true;
}
}
//--- Zapis do portu (ręczny)---------------------------------------------------
private void zapiszDoPortu(String tekst) {
if (stanPortu == true) { // port otwarty
try {
outputStream.write(tekst.getBytes());
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
//--- Odczyt z portu (automatyczny)---------------------------------------------
public void serialEvent(SerialPortEvent event) {
switch(event.getEventType()) {
case SerialPortEvent.BI: // int =10
case SerialPortEvent.OE: // int =7
case SerialPortEvent.FE: // int =9
case SerialPortEvent.PE: // int =8
case SerialPortEvent.CD: // int =6
case SerialPortEvent.CTS: // int =3
case SerialPortEvent.DSR: // int =4
case SerialPortEvent.RI: // int =5
case SerialPortEvent.OUTPUT_BUFFER_EMPTY: // int =2
break;
case SerialPortEvent.DATA_AVAILABLE: // int =1
try {
int nb = inputStream.available();// ilość bajtów odczytana ze strumienia
while (nb > 0) {
byte[] readBuffer = new byte[nb];
inputStream.read(readBuffer);
String str = new String(readBuffer);
// str = str.replace("\r","\n");
jTextArea1.append(str + "\n");
nb = inputStream.available();
}
} catch (IOException ex) {
ex.printStackTrace();
}
jTextArea1.setCaretPosition(jTextArea1.getText().length());
break;
}
}
}
public Robo() {
}
public void useRobot(){
try{
Robot r = new Robot();
r.mouseMove(5, 5);
r.toString();
}
catch (AWTException e){}
}
public void useRobot2(){
try{
Robot r = new Robot();
r...... //some other things
}
catch (AWTException e){}
}
}
A tu błedy
run:
WARNING: RXTX Version mismatch
Jar version = RXTX-2.2pre1
native lib Version = RXTX-2.2pre2
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: setSelectedIndex: 0 out of bounds
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:620)
at RS232.PortSzeregowy.<init>(PortSzeregowy.java:52)
at RS232.PortSzeregowy$7.run(PortSzeregowy.java:332)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)