2

JavaPOS、JCL、JDK、パス、およびクラスパスの詳細をしばらく調査してきましたが、JavaPOS を使用して Epson TM-T20 レシート プリンターで行を正常に印刷する方法を見つけようとしています。ディスク (プリンターに付属) からの javaPOS インストールは Windows 10 に正しくインストールされないため (Linux にインストールすると考えられます)、独自の jpos.xml ファイルを作成する必要があります。プリンターのデバイス エントリを含める必要があります。(また、Epson から新しい JavaPOS ADK のダウンロードを試みましたが、古いバージョンも成功しませんでした)。

これがこれまでの私の設定です....

  1. 最新の JCL を抽出しました。クラスパスを JCL バイナリ ファイル (jar ファイル) に設定する代わりに、それらを java ext ディレクトリに配置しました。
  2. JDK1.8.0_74 にある Java の「src.zip」を「src」として JDK1.8.0_74 ディレクトリに解凍しました。
  3. すべての jpos ソース ファイルを含む「jpos」フォルダーをその「src」フォルダーに配置したので、テスト アプリケーションに簡単にインポートできます。
  4. 私は他の jpos.xml (POSTest/2 & Starmicronics などを含む) を調べて、どのエントリを含める必要があるかを理解しました。
  5. jpos.xml を Java の「src」フォルダに配置しました。

これが私のjpos.xmlです....

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE JposEntries PUBLIC "-//JavaPOS//DTD//EN"

"jpos/res/jcl.dtd">

<JposEntries>
<!--Saved by JavaPOS jpos.config/loader (JCL) version 2.3.0-RC3 on 6/03/16 1:20 PM-->

<JposEntry logicalName="TM-T20">

<creation factoryClass="jpos.loader.JposServiceInstanceFactory" serviceClass="jpos.services.POSPrinterService114"/>
<vendor name="Seiko Epson" url="http://www.Epson.com"/>

<jpos category="POSPrinter" version="1.14"/>

<product description="Epson Thermal Receipt Printer TM-T20" name="TM-T20" url="http://www.Epson.com"/>


<!--Other non JavaPOS required property (mostly vendor properties and bus specific properties i.e. RS232 )-->

<prop name="deviceBus" type="String" value="USB"/>
<prop name="portName" type="String" value="ESDPRT001"/>

<prop name="model" type="String" value="TM-T20"/>
</JposEntry>


 </JposEntries>

これが私のテストアプリケーションです...

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.UIManager;
import jpos.util.JposPropertiesConst;



public class ReceiptPrintMain {


public ReceiptPrintMain() {

    ReceiptPrint2 frame = new ReceiptPrint2();

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    Dimension frameSize = frame.getSize();
    frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
    frame.setVisible(true);
}

public static void main(String[] args) {
    System.setProperty(JposPropertiesConst.JPOS_POPULATOR_FILE_PROP_NAME, "C:\\Program Files (x86)\\Java\\jdk1.8.0_74\\src\\jpos.xml");
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch(Exception e) {
        e.printStackTrace();
    }
    new ReceiptPrintMain();
}
}

// File: ReceiptPrint2
// Purpose:

import java.awt.AWTEvent;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import jpos.JposException;
import jpos.POSPrinter;
import jpos.POSPrinterConst;



public class ReceiptPrint2 extends JFrame {   


POSPrinter ptr = new POSPrinter();
JPanel contentPane;
JPanel jPanel_reciept = new JPanel();
TitledBorder titledBorder1;
GridBagLayout gridBagLayout1 = new GridBagLayout();
GridBagLayout gridBagLayout2 = new GridBagLayout();
JButton jButton_Print = new JButton();


public ReceiptPrint2() {

    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
        jbInit();
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}

private void jbInit() throws Exception  {

    contentPane = (JPanel) this.getContentPane();
    titledBorder1 = new TitledBorder(BorderFactory.createEtchedBorder(Color.white,new Color(134, 134, 134)),"Receipt");
    contentPane.setLayout(gridBagLayout1);
    this.setSize(new Dimension(300, 180));
    this.setTitle("Step 1  Print \"Hello JavaPOS\"");
    jPanel_reciept.setLayout(gridBagLayout2);
    jPanel_reciept.setBorder(titledBorder1);
    jButton_Print.setText("Print");
    jButton_Print.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
                jButton_Print_actionPerformed(e);
        }
    });
    contentPane.add(jPanel_reciept, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
                    ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(15, 0, 0, 0), 20, 20));
    jPanel_reciept.add(jButton_Print, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
                    ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 10, 5, 10), 130, 0));
}   

protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            this.closing();
    }

    else if (e.getID() == WindowEvent.WINDOW_OPENED) {

        try {
            ptr.open("TM-T20");

            ptr.claim(1000);

            ptr.setDeviceEnabled(true);
        }
        catch(JposException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }
    }
}

void jButton_Print_actionPerformed(ActionEvent e) {     
    try{                
        ptr.printNormal(POSPrinterConst.PTR_S_RECEIPT,"Hello JavaPOS\n");
    }
    catch(JposException ex){
       JOptionPane.showMessageDialog(null, ex.getMessage());
    }       
}

void closing(){     
    try{            
        ptr.setDeviceEnabled(false);

        ptr.release();

        ptr.close();
    }
    catch(JposException ex){
    }        
    System.exit(0);
}    
}

表示されるエラー メッセージは....「論理名 = TM-T20 のサービスに接続できませんでした: Exception.message = jpos.loader.jpos.ServiceInstanceFactory.init()」です。

jpos.xml ファイルのエントリ、主に factoryClass および/または serviceClass が間違っていると思います。誰でも私を助けてください。おそらく誰かが TM-T20 用に作成された jpos.xml ファイルを持っていて、共有してもかまわないでしょう。

4

0 に答える 0