【问题标题】:java.lang.NoClassDefFoundError: javax.print.PrintServiceLookup in ANDROIDjava.lang.NoClassDefFoundError:ANDROID 中的 javax.print.PrintServiceLookup
【发布时间】:2014-10-06 18:49:36
【问题描述】:

我正在开发一个应该显示所有打印机并且必须在 Android 中进行打印的 android 项目。我在我的android项目中使用了JAVAX库系统库。

这是我将库添加到我的应用程序的方式:

Open project properties by right clicking project and selecting properties
Select JAVA build path on the left pane
Select Libraries tab from right side
Click add Library button
Select JRE system library and add required package.

Mainactivity java 代码:

package com.example.codeandroidprinter;

import javax.print.PrintService;
import javax.print.PrintServiceLookup;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button print = (Button) findViewById(R.id.print);

        print.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), "ddd", Toast.LENGTH_SHORT).show();

                try
                {
                    String printernames="";
                    PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
                    for (int i = 0; i < printServices.length; i++) { 
                        PrintService printer = printServices[i];
                        printernames =   printernames + printer.getName() + ",";    
                    }
                    System.out.print(printernames);
                }
                catch(Exception e)
                {
                    System.out.println(e);
                }

            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }



}

Xml 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.codeandroidprinter.MainActivity$PlaceholderFragment" >

    <Button
        android:id="@+id/print"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

当我点击按钮时,我得到的结果为

java.lang.NoClassDefFoundError: javax.print.PrintServiceLookup

请帮我解决这个问题。

【问题讨论】:

  • javax.print 包不是 android api 的一部分

标签: android android-layout android-library java


【解决方案1】:

我的android项目使用了JAVAX库系统库。

那是行不通的。 Android 通常不会从其他地方加载 java/javax 类,正如 Selvin 所说,javax.print 不是 Android 本身的一部分。

我正在开发一个应该显示所有打印机并且必须在 Android 中进行打印的 android 项目。

欢迎您使用the printing APIs added to Android 4.4。在此之前,Android 不支持打印,但各种第三方工具(例如 Google Cloud Print)为人们提供了各种连接特定打印机的方式。

【讨论】:

  • 那么对于 4.4 以下的 android 版本我们该如何实现呢?
  • @shankark:您将打印机连接到提供某种设备上 API 的东西,例如 Google 云打印。这样的 API 可能相当有限——我似乎记得使用 Google Cloud Print,您所能做的就是向它发送要打印的文档,然后它从那里接管。
  • @shankark:“我们不能从程序员那里打印?” -- 任何Java 打印API,包括您尝试使用但失败的API,都需要您创建某种要打印的文档。该文档是已经作为文件存在还是您以编程方式创建的内容取决于程序员。 “GCP 是唯一的选项?” ——请停止叫喊。欢迎您研究打印机制造商(例如 HP)或其他第三方是否创建了类似 GCP 的解决方案。操作系统本身在 Android 4.4 之前不支持打印。
猜你喜欢
  • 2014-02-28
  • 2015-01-11
  • 2015-09-23
  • 2015-11-19
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多