1

まず始めに、私はJavaの初心者です。

以下は私のアプレット コードです。コンパイルすると注意が表示されます (注: CallApplet.java は未チェックまたは安全でない操作を使用します。注: 詳細については -Xlint:unchecked で再コンパイルしてください)。ただし、エラーは発生しません。

アップデート

JavaScript 経由で mprintt メソッドを呼び出すと、このエラーが発生します。ご覧のとおり、DLL インスタンスを呼び出そうとします。

import javax.swing.*;
import javax.print.*;
import java.util.ArrayList;
import com.sun.jna.Library;
import com.sun.jna.Native;
import java.awt.print.*;
import java.security.*;

public class CallApplet extends JApplet {

    JTextField output;

    public void init() {
        output = new JTextField(20);
        add(output);
        validate();
    }

    public void setMessage(String message) {
        output.setText(message);
    }

    public String getPrinters() {
        PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
        ArrayList<String> myStringArray = new ArrayList<String>();

        String s = new String();

        int i = 0;

        for (PrintService printer : printServices) {
            myStringArray.add(printer.getName());

            if (i > 0) {
                s = s + ",";
            }

            s = s + "\"" + printer.getName() + "\"";

            i++;
        }

        s = "[" + s + "]";

        String[] simpleArray = new String[ myStringArray.size() ];
        myStringArray.toArray( simpleArray );

        return s;
    }

    public void jPrint(String printer) {

        if (printer.length() <= 0) {
            return;
        }

        //output.setText(printer);

        //TcsPrint tcsPrinter = new TcsPrint();
        //tcsPrinter.print(printer);  
    }

    public interface TscLibDll extends Library {
        TscLibDll INSTANCE = (TscLibDll) AccessController.doPrivileged(new PrivilegedAction () {
            public Object run() {
                return Native.loadLibrary ("TSCLIB", TscLibDll.class);
            }
        });
        int about ();
        int openport (String pirnterName);
        int closeport ();
        int sendcommand (String printerCommand);
        int setup (String width,String height,String speed,String density,String sensor,String vertical,String offset);
        int downloadpcx (String filename,String image_name);
        int barcode (String x,String y,String type,String height,String readable,String rotation,String narrow,String wide,String code);
        int printerfont (String x,String y,String fonttype,String rotation,String xmul,String ymul,String text);
        int clearbuffer ();
        int printlabel (String set, String copy);
        int formfeed ();
        int nobackfeed ();
        int windowsfont (int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName, String content);
    }

    public void mprintt(String printer) {

        TscLibDll.INSTANCE.openport(printer);
        TscLibDll.INSTANCE.sendcommand("REM ***** This is a test by JAVA. *****");
        TscLibDll.INSTANCE.setup("35", "15", "3", "8", "0", "3", "-1");
        TscLibDll.INSTANCE.clearbuffer();
        TscLibDll.INSTANCE.printerfont ("290", "8", "3", "0", "1", "1", "ARTICLE NO");
        TscLibDll.INSTANCE.barcode("290", "35", "128", "50", "1", "0", "2", "2", "123456789");
        TscLibDll.INSTANCE.printlabel("1", "1");
        TscLibDll.INSTANCE.closeport();
    }
}

以下は私のhtmlです

<html>
    <body>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type='text/javascript'>

    var printers;

    function selectPrinter()
    {
        applet = document.getElementById('output');
        printers = applet.getPrinters();

    }

    </script>

    <br>
        <applet
            id='output'
            code='CallApplet.class'
            archive='.,./jna.jar'
            width=100
            height=100>
        </applet>

        <input type="button" onclick="selectPrinter()" value="Show Printers" /> <input type="button" onclick="goPrint" value="Print" />
        <select name="printers">
        </select>

        dsdsdg
    </body>
</html>

ご覧のとおり、jna.jar を使用してカスタム サーマル プリンター DLL をロードしています。

「java.lang.reflect.InvocationTargetException」というエラーが表示されます。アプレットと jna の複雑さが原因だと思います。

これを克服し、このアプレットをこの DLL 経由で印刷する方法を教えてください。

4

2 に答える 2

2

通常、InvocationTargetExceptionはルート例外をラップするだけです。ルート例外はスタックトレースにリストされているか、「getCause()」メソッドを使用してアクセスできます。スタックトレースを投稿すると役立つ場合があります。

于 2012-11-21T19:47:04.727 に答える
0

tcbcwが述べたように、バグを見つけるか、スタックトレースを取得するために単純化しようとします。アプレットから印刷サービスにアクセスしてみてください、それは機能しますか?コードをスライスしてバグを見つけるか、スタックトレースを取得しますが、これ以上のことはできません。

于 2012-11-21T20:10:35.523 に答える