0

我试图从我的代码创建 exe 文件,但它让我出错

java.lang.ClassNotFoundException: Access2
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)

我使用exe4j工具从 jar 文件生成 exe 我使用 Jdk 1.8.0_25

这是我主要课程的一部分(Access2)

  public class Access2
{
  BufferedReader in;
  Writer out;
  String CommData = "";
  String TextData = "";
  int FrameNo = 1;
  String STX = String.valueOf('\002');
  String ETX = String.valueOf('\003');
  String EOT = String.valueOf('\004');
  String ENQ = String.valueOf('\005');
  String ACK = String.valueOf('\006');
  String LF = String.valueOf('\n');
  String CR = String.valueOf('\r');
  String DEL = String.valueOf('\007');
  String NAK = String.valueOf('\025');
  String SYN = String.valueOf('\026');
  String ETB = String.valueOf('\027');
  String CRLF = this.CR + this.LF;
  String enc;
  String LastType = "";
  String PatientID;
  String PatientName;
  String SampleID;
  String Result = "";
  String Parameter = "";
  String PatientComment;
  String SampleComment;
  String ResultComment = "";
  String QuerySampleID;
  boolean QueryAsked = false;
  Connection connection = null;
  Statement stmt = null;
  PreparedStatement prepStatement = null;
  ResultSet rs = null;
  String machine = Setting.GetPropVal("MachineName");
  ArrayList<String> DataToSend = new ArrayList();
  int Max_Farme_Size = 240;
  int FIndex = 1;
  int CurIndex = 0;
  int RowIndex = 1;
  String Frame_Sep;
  int retries = 6;
  Connection connection2 = null;
  Statement stmt2 = null;
  PreparedStatement prepStatement2 = null;
  ResultSet rs2 = null;

  public Access2(Socket s)
  {
    try
    {
      this.enc = Setting.GetPropVal("Encoding");
      this.in = new BufferedReader(new InputStreamReader(s.getInputStream(), this.enc));
      this.out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream(), this.enc));
    }
    catch (IOException e)
    {
      JOptionPane.showMessageDialog(null, e, "IOException", 1);
      System.exit(0);
    }
    catch (Exception e)
    {
      JOptionPane.showMessageDialog(null, e, "Exception", 1);
      System.exit(0);
    }
  }

  public Access2(SerialPort ser)
  {
    try
    {
      this.enc = Setting.GetPropVal("Encoding");
      this.in = new BufferedReader(new InputStreamReader(ser.getInputStream(), this.enc));
      this.out = new BufferedWriter(new OutputStreamWriter(ser.getOutputStream(), this.enc));
    }
    catch (IOException e)
    {
      JOptionPane.showMessageDialog(null, e, "IOException", 1);
      System.exit(0);
    }
    catch (Exception e)
    {
      JOptionPane.showMessageDialog(null, e, "Exception", 1);
      System.exit(0);
    }
  }

  public void NextFrameNo()
  {
    this.FrameNo += 1;
    if (this.FrameNo > 7) {
      this.FrameNo = 0;
    }
  }

  public void SaveData(String data)
  {
    String data2save = data.replaceAll(this.ENQ, "<ENQ>").replaceAll(this.STX, "<STX>").replaceAll(this.ETX, "<ETX>").replaceAll(this.EOT, "<EOT>").replaceAll(this.CR, "<CR>").replaceAll(this.CRLF, "<CRLF>").replaceAll(this.ETB, "<ETB>");

    LogFile.createLog(this.machine + "_" + CurrentDate.getDate(2) + ".txt", "\r\n[" + CurrentDate.getDate(1) + "]" + ":" + data2save);
  }

  public String[] ParseFrames(String Data)
  {
    String[] Frame = Data.split(this.CR);
    return Frame;
  }

  public boolean CheckSumCorrect()
  {
    String Frame = GetFrameData(this.CommData, 1);
    String CalculatedSum = GetCheckSum(Frame);
    String FrameSum = GetFrameData(this.CommData, 3);
    boolean Status = CalculatedSum.equals(FrameSum);
    return Status;
  }

  public boolean CheckFarmeNum()
  {
    String FN = GetFrameData(this.CommData, 4);
    boolean Status;
    if (Integer.toString(this.FrameNo).equals(FN))
    {
      Status = true;
      NextFrameNo();
    }
    else
    {
      Status = false;
    }
    return Status;
  }

  public String GetCheckSum(String Dat)
  {
    int x = 0;
    for (int i = 0; i < Dat.length(); i++) {
      x += Dat.charAt(i);
    }
    String S = "00" + Integer.toHexString(x % 256);
    String CheckSum = S.substring(S.length() - 2).toUpperCase();
    return CheckSum;
  }

  public String GetFrameData(String Data, int FrameType)
  {
    String Frame = "";
    int pos1 = Data.indexOf(this.STX);
    int pos2 = Data.indexOf(this.ETX);
    int pos3 = Data.indexOf(this.ETB);
    if (FrameType == 1)
    {
      if (Data.contains(this.ETX)) {
        Frame = Data.substring(pos1 + 1, pos2 + 1);
      } else if (Data.contains(this.ETB)) {
        Frame = Data.substring(pos1 + 1, pos3 + 1);
      }
    }
    else if (FrameType == 2)
    {
      if (Data.contains(this.ETX)) {
        Frame = Data.substring(pos1 + 2, pos2);
      } else if (Data.contains(this.ETB)) {
        Frame = Data.substring(pos1 + 2, pos3);
      }
    }
    else if (FrameType == 3)
    {
      if (Data.contains(this.ETX)) {
        Frame = Data.substring(pos2 + 1, pos2 + 3);
      } else if (Data.contains(this.ETB)) {
        Frame = Data.substring(pos3 + 1, pos3 + 3);
      }
    }
    else if (FrameType == 4) {
      Frame = Data.substring(pos1 + 1, pos1 + 2);
    }
    return Frame;
  }

  public void sendtoport(String Sample_ID)
  {
    try
    {
      int sent = 0;
      for (String DataToSend1 : this.DataToSend)
      {
        this.out.write(DataToSend1);
        this.out.flush();
        SaveData(DataToSend1);
        char c = (char)this.in.read();
        String control = String.valueOf(c);
        if (control.equals(this.ACK))
        {
          sent = 1;
        }
        else if (control.equals(this.NAK))
        {
          for (int x = 1; x <= this.retries; x++)
          {
            this.out.write(DataToSend1);
            this.out.flush();
            SaveData(DataToSend1);
          }
          sent = 0;
          break;
        }
      }
      this.DataToSend.clear();
      this.FIndex = 1;
      this.out.write(this.EOT);
      this.out.flush();
      SaveData(this.EOT);
      try
      {
        this.connection2 = DBconnection.getConnection();
        String ExecProc = "HK_Update_SCH ?,?,?";
        this.connection2.setAutoCommit(false);
        this.prepStatement = this.connection2.prepareStatement(ExecProc);
        this.prepStatement2.setString(1, Sample_ID);
        this.prepStatement2.setString(2, "Access2");
        this.prepStatement2.setString(3, "");
        this.prepStatement2.executeUpdate();
        this.connection2.commit();
      }
      catch (SQLException e)
      {
        JOptionPane.showMessageDialog(null, e, "SQLException", 1);
      }
      catch (Exception e)
      {
        JOptionPane.showMessageDialog(null, e, "Exception", 1);
      }
      Thread.sleep(10L);
    }
    catch (IOException e)
    {
      JOptionPane.showMessageDialog(null, e, "IOException", 1);
      System.exit(0);
    }
    catch (HeadlessException|InterruptedException e)
    {
      JOptionPane.showMessageDialog(null, e, "Exception", 1);
      System.exit(0);
    }
  }

  public void SplitFrames(String Frame)
  {
    int NumSplit = Frame.length() / this.Max_Farme_Size;
    for (int i = 0; i <= NumSplit; i++) {
      if (i < NumSplit)
      {
        String part = Frame.substring(i * this.Max_Farme_Size, i * this.Max_Farme_Size + this.Max_Farme_Size);
        String IntermdiateFrame = this.STX + this.FIndex + part + this.ETB + GetCheckSum(new StringBuilder().append(this.FIndex).append(part).append(this.ETB).toString()) + this.CRLF;
        this.DataToSend.add(this.DataToSend.size(), IntermdiateFrame);
        NextFIndexNo();
      }
      else
      {
        String part = Frame.substring(i * this.Max_Farme_Size);
        String LastFrame = this.STX + this.FIndex + part + this.ETX + GetCheckSum(new StringBuilder().append(this.FIndex).append(part).append(this.ETX).toString()) + this.CRLF;
        this.DataToSend.add(this.DataToSend.size(), LastFrame);
        NextFIndexNo();
      }
    }
  }

  public void NextFIndexNo()
  {
    this.FIndex += 1;
    if (this.FIndex > 7) {
      this.FIndex = 0;
    }
  }

  public void SendOrder(String[] OrderFrame)
  {
    this.DataToSend.clear();
    this.DataToSend.add(0, this.ENQ);
    for (int i = 0; i < OrderFrame.length; i++) {
      if (OrderFrame[i].length() > this.Max_Farme_Size)
      {
        SplitFrames(OrderFrame[i]);
      }
      else
      {
        String SingleFrame = this.STX + this.FIndex + OrderFrame[i] + this.ETX + GetCheckSum(new StringBuilder().append(this.FIndex).append(OrderFrame[i]).append(this.ETX).toString()) + this.CRLF;
        this.DataToSend.add(this.DataToSend.size(), SingleFrame);
        NextFIndexNo();
      }
    }
  }

  public void SendOrderData(String SampleData, String TestCodes)
  {
    HeaderRecord HRec = new HeaderRecord();
    PatientRecord PRec = new PatientRecord();
    OrderRecord ORec = new OrderRecord();
    MessageTerminatorRecord LRec = new MessageTerminatorRecord();

    PRec.SetPropertyValue("PracticePatientID", SampleData);
    PRec.SetPropertyValue("LabPatientID", SampleData);
    PRec.SetPropertyValue("PatientSex", "M");

    ORec.SetPropertyValue("SampleID", SampleData);
    ORec.SetPropertyValue("ActionCode", "N");

    ORec.SetPropertyValue("UniversalTestID", "^^^" + TestCodes.replace(",", "\\^^^"));
    ORec.SetPropertyValue("SampleType", "Serum");
    ORec.SetPropertyValue("ReportTypes", "O");

    String[] records = new String[4];
    records[0] = HRec.FormatFrame();
    records[1] = PRec.FormatFrame();
    records[2] = ORec.FormatFrame();
    records[3] = LRec.FormatFrame();

    String Msg = HRec.FormatFrame() + PRec.FormatFrame() + ORec.FormatFrame() + LRec.FormatFrame();
    System.out.println(">>>>>>>>" + Msg);
    try
    {
      SendOrder(records);
    }
    catch (Exception e)
    {
      JOptionPane.showMessageDialog(null, e, "Exception", 1);
      System.exit(0);
    }
  }

  public void FramesReady(String[] Frame)
  {

  }

  public void ManageData()
  {
    try
    {
      if (this.CommData.contains(this.ENQ))
      {
        SaveData(this.CommData);
        this.CommData = "";
        this.out.write(this.ACK);
        this.out.flush();
      }
      else if (this.CommData.contains(this.CRLF))
      {
        SaveData(this.CommData);
        if ((CheckSumCorrect()) && (CheckFarmeNum()))
        {
          this.TextData += GetFrameData(this.CommData, 2);
          this.CommData = "";
          this.out.write(this.ACK);
          this.out.flush();
        }
        else if ((!CheckSumCorrect()) || (!CheckFarmeNum()))
        {
          this.CommData = "";
          this.out.write(this.NAK);
          this.out.flush();
        }
      }
      else if (this.CommData.contains(this.EOT))
      {
        SaveData(this.CommData);
        String[] x = ParseFrames(this.TextData);
        FramesReady(x);
        this.TextData = "";
        this.FrameNo = 1;
        this.CommData = "";
      }
    }
    catch (IOException e)
    {
      JOptionPane.showMessageDialog(null, e, "IOException", 1);
      System.exit(0);
    }
    catch (Exception e)
    {
      JOptionPane.showMessageDialog(null, e, "Exception", 1);
      System.exit(0);
    }
  }

  public void Server()
  {
    try
    {
      for (;;)
      {
        char c = (char)this.in.read();
        System.out.print(c);
        this.CommData += c;
        ManageData();
      }
    }
    catch (IOException e)
    {
      JOptionPane.showMessageDialog(null, e, "IOException", 1);
      System.exit(0);
    }
    catch (Exception e)
    {
      JOptionPane.showMessageDialog(null, e, "Exception", 1);
      System.exit(0);
    }
  }

  public static void main(String[] args)
    throws Exception
  {
    switch (Setting.GetPropVal("Socket"))
    {
    case "TCPIP": 
      String IP = Setting.GetPropVal("IPaddress");

      int Port2Rec = Integer.parseInt(Setting.GetPropVal("INport"));
      InetAddress addr = InetAddress.getByName(IP);
      String host = addr.getHostName();
      Socket s = new Socket(host, Port2Rec);
      System.out.println("Connected to :" + host + "/" + Port2Rec);
      Access2 TcpChat = new Access2(s);
      TcpChat.Server();

      break;
    case "Serial": 
      SerialPort serialPort = null;

      Enumeration portList = CommPortIdentifier.getPortIdentifiers();
      while (portList.hasMoreElements())
      {
        CommPortIdentifier portId = (CommPortIdentifier)portList.nextElement();
        if ((portId.getPortType() == 1) && 

          (portId.getName().equals(Setting.GetPropVal("ComPort"))))
        {
          serialPort = (SerialPort)portId.open("HPS", 10);
          serialPort.setSerialPortParams(9600, 8, 1, 0);
        }
      }
      System.out.println("Connected to :" + serialPort.getName());
      Access2 SerialChat = new Access2(serialPort);
      SerialChat.Server();
    }
  }
}

当我从 Eclipse 运行程序时,显示“错误路径或文件丢失”

public class Setting
{
  public static Properties props;
  public static String propVal;

  public static String GetPropVal(String param)
  {
    try
    {
      props = new Properties();
      props.load(new FileInputStream("Access2.ini"));
      propVal = props.getProperty(param);
    }
    catch (IOException e)
    {
      JOptionPane.showMessageDialog(null, "Wrong Path OR file Lost", "Alert", 1);
      System.exit(0);
    }
    return propVal;
  }
}

我该如何解决?它说我的课程没有找到但它存在解决方案是什么?

4

1 回答 1

1

发生这种情况的原因是类文件的不正确打包,或者更确切地说,是包内 Java 文件的不正确编译。

使用包含 Java 文件的干净目录的构建工具(例如 Maven),然后生成 .jar。

基本上,如果可以的话,创建一个新的 Maven 或 Ant 项目并创建具有相同名称的 Java 文件并将内容一个一个粘贴到新文件中。

编辑:确保主包中只有一个公共类。

于 2017-06-30T16:21:57.560 回答