2012-11-21 4 views
1

그냥 자바에서 초보자부터 시작하겠습니다.자바 애플릿에 오류가 발생했습니다. java.lang.reflect.InvocationTargetException

다음은 필자의 애플릿 코드입니다 (주의 : CallApplet.java는 검사되지 않거나 안전하지 않은 작업을 사용합니다.) 참고 : 오류가없는 경우 -Xlint를 사용하여 다시 컴파일하십시오. 난 자바 스크립트를 통해 mprintt 메서드를 호출 할 때

UPDATE

나는이 오류가 발생합니다. 보시다시피 DLL 인스턴스를 호출하려고합니다. 모두 내가 정의 열 프린터 DLL을로드 jna.jar 사용하고 볼 수 있듯이

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> 

입니다.

"java.lang.reflect.InvocationTargetException"오류가 발생했습니다. 필자는 애플릿과 jna의 합병증이 너무 많다고 생각합니다.

이 문제를 극복하고이 애플릿을이 DLL을 통해 인쇄하는 방법을 알려주십시오.

답변

2

일반적으로 InvocationTargetException은 루트 예외를 래핑합니다. 루트 예외는 스택 추적에 나열되거나 "getCause()"메소드를 사용하여 액세스 가능해야합니다. 스택 추적 게시는 도움이 될 수 있습니다.

+0

mprintt 메서드를 호출 할 때이 오류가 발생합니다. 보시다시피 DLL 인스턴스를 호출하려고합니다. – Sudesh

0

tcbcw가 설명한대로 버그를 찾거나 스택 추적을 얻으려고 단순화하려고합니다. 애플릿에서 인쇄 서비스에 액세스하면 어떻게됩니까? 코드를 잘라서 버그를 찾거나 스택 추적을 얻으십시오.

관련 문제