⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receiver.java

📁 本源码给出了在jbuilder下实现串口通信,并且如何使用
💻 JAVA
字号:
/*
 * @(#)Receiver.java	1.1 98/06/02 SMI
 *
 * Author: Tom Corson
 *
 * Copyright (c) 1998 Sun Microsystems, Inc. All Rights Reserved.
 *
 * Sun grants you ("Licensee") a non-exclusive, royalty free, license
 * to use, modify and redistribute this software in source and binary
 * code form, provided that i) this copyright notice and license appear
 * on all copies of the software; and ii) Licensee does not utilize the
 * software in a manner which is disparaging to Sun.
 *
 * This software is provided "AS IS," without a warranty of any kind.
 * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
 * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND
 * ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
 * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE
 * SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS
 * BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
 * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES,
 * HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING
 * OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * This software is not designed or intended for use in on-line control
 * of aircraft, air traffic, aircraft navigation or aircraft
 * communications; or in the design, construction, operation or
 * maintenance of any nuclear facility. Licensee represents and
 * warrants that it will not use or redistribute the Software for such
 * purposes.
 */

package samples.ParallelBlackBox;

import java.io.IOException;

import java.lang.Character;

import java.awt.Panel;
import java.awt.TextArea;
import java.awt.BorderLayout;

import javax.comm.ParallelPort;

public class Receiver
    extends Panel implements Runnable {
  private TextArea text;
  private ReceiveOptions options;
  private ByteStatistics counter;
  private ParallelPortDisplay owner;
  private byte[] buffer;
  private int textCount;
  private int delay;

  public Receiver(ParallelPortDisplay owner,
                  int rows,
                  int cols) {
    super();

    this.owner = owner;

    this.buffer = new byte[2048];

    this.setLayout(new BorderLayout());

    this.options = new ReceiveOptions(owner.port);
    this.add("North", this.options);

    this.counter = new ByteStatistics("Bytes Received", 10,
                                      owner.port, true);
    this.add("South", this.counter);

    this.text = new TextArea(rows, cols);
    this.add("Center", text);

    this.textCount = 0;
    this.delay = 0;
  }

  public Receiver(ParallelPortDisplay owner,
                  int rows,
                  int cols,
                  int delay) {
    this(owner, rows, cols);

    this.delay = delay;
  }

  public void setPort(ParallelPort port) {
    this.counter.setPort(port);

    this.options.setPort(port);
  }

  public void showValues() {
    this.options.showValues();
    this.counter.showValues();
  }

  public void clearValues() {
    this.text.setText("");

    this.counter.clearValues();

    this.options.clearValues();
  }

  public void setBitsPerCharacter(int val) {
    this.counter.setBitsPerCharacter(val);
  }

  public void run() {
    while (this.owner.open) {
      try {
        synchronized (this) {
          wait(10000);
        }
      }

      catch (InterruptedException e) {
      }

      if (this.owner.ctlSigs.DA) {
        this.readData();
      }
    }
  }

  private String displayText(byte[] bytes,
                             int byteCount) {
    String str;
    int i,
        idx;
    byte[] nb;

    /*  Don't let the text area get too big! */

    if (this.textCount > 5000) {
      this.text.setText("");

      this.textCount = 0;
    }

    nb = new byte[byteCount * 4];

    for (i = 0, idx = 0; i < byteCount; i++) {
      /*  Wrap any control characters	*/

      if (Character.isISOControl( (char) bytes[i])
          && !Character.isWhitespace( (char) bytes[i])) {
        nb[idx++] = '<';
        nb[idx++] = '^';
        nb[idx++] = (byte) (bytes[i] + 64);
        nb[idx++] = '>';
      }

      else {
        nb[idx++] = bytes[i];
      }
    }

    str = new String(nb, 0, idx);

    this.text.append(str);

    this.counter.incrementValue( (long) byteCount);

    this.textCount += byteCount;

    return (str);
  }

  public void readData() {
    String str;
    int bytes;
    long endTime,
        now;

    try {
      while (this.owner.open
             && (this.owner.in.available() > 0)) {
        bytes = this.owner.in.read(this.buffer);

        if (bytes > 0) {
          if (bytes > this.buffer.length) {
            System.out.println(owner.port.getName()
                               + ": Input buffer overflow!");
          }

          str = this.displayText(this.buffer, bytes);

          if (this.owner.lineMonitor) {
            this.owner.transmitter.sendString(str);
          }
        }

        if (this.delay > 0) {
          endTime = System.currentTimeMillis()
              + (long) delay;

          now = 0;

          while (now < endTime) {
            try {
              Thread.sleep(delay);
            }

            catch (InterruptedException e) {
            }

            now =
                System.currentTimeMillis();
          }
        }
      }

      owner.ctlSigs.DA = false;

      owner.ctlSigs.showErrorValues();
    }

    catch (IOException ex) {
      System.out.println(owner.port.getName()
                         + ": Cannot read input stream");
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -