2013-05-12 35 views
11

Tôi cố gắng để sử dụng pdfbox để viết một tập tin pdf đơn giản nhưng vấn đề là tôi nhận được lỗi:Java gói nhập khẩu không tồn tại

cannot find symbol class PDDocument 

Tôi đã tải các tập tin jar vào cùng một thư mục chương trình tồn tại. Cách khắc phục lỗi biên dịch này?

package org.apache.pdfbox.pdmodel.PDDocument; 

import java.io.*; 
import org.apache.pdfbox.pdmodel.PDDocument; 

public class pdf 
{ 
public static void main(String args[]) 
{ 
} 
} 
+0

Đây có phải là lỗi biên dịch từ javac chạy trên một dòng lệnh, hoặc từ IDE của bạn? Nó không đủ để đặt các jar trong cùng một thư mục - bạn cần phải thêm nó vào classpath của công cụ bạn đang sử dụng. –

+2

'package org.apache.pdfbox.pdmodel.PDDocument;' Gói của bạn không phải là tên đủ điều kiện của một lớp học hiện có! –

+0

cảm ơn andrew. tôi sẽ loại bỏ nó ngay bây giờ. – user1952529

Trả lời

2

Bạn sẽ cần phải đảm bảo rằng tệp JAR nằm trên đường dẫn lớp.

+0

Cảm ơn bạn đã trả lời.Để đảm bảo, tôi sử dụng ví dụ tốt, tôi sử dụng CreateBlankPDF.java từ trang web của apache. Để biên dịch, tôi đã làm điều này, javac -cp pdfbox-1.8.1.jar CreateBlankPDF.java và để chạy chương trình, tôi đã làm điều này: java -classpath pdfbox-1.8.1.jar CreateBlankPDF Ngoại lệ trong chủ đề "chính" java.lang.NoClassDefFoundError: CreateBlankPDF Gây ra bởi: java.lang.ClassNotFoundException: CreateBlankPDF – user1952529

7

Đặt bình trong cùng một thư mục hoặc gói không thêm nó vào đường dẫn lớp. Bạn cần phải đề cập đến đường dẫn của jar trong đường dẫn lớp của bạn trong khi chạy chương trình java của bạn. Đây là cú pháp cho rằng:

Để biên dịch:

javac -classpath .;yourjar.jar src/your/package/*.java 

Để chạy

java -classpath .;yourjar.jar src/your/package/yourprogrammeclassname 
+0

Điều đó sẽ không khắc phục lỗi biên dịch. –

+0

Để biên dịch, bạn có thể đặt biến môi trường CLASSPATH. –

+2

Bất kỳ lớp nào mà mã của bạn sử dụng mà bạn không tự viết cần vị trí của chúng được chỉ ra cho trình biên dịch để nó có thể liên kết chúng với mã của bạn khi nó biên dịch mọi thứ lại với nhau. Đường dẫn hệ thống tập tin đến các lớp đó được gọi là classpath. Có hai cách để cho trình biên dịch biết nơi để tìm các lớp bên ngoài. Một là để vượt qua "-classpath" cờ khi bạn gọi trình biên dịch và làm theo nó với một danh sách phân cách bằng dấu chấm phẩy của đường dẫn nơi các lớp được tìm thấy. –

2

gặp một vấn đề tương tự như tôi thấy rằng tôi không có cú pháp chính xác trên dòng nhập khẩu trong java source

thực hiện một biên dịch như sau (trên cửa sổ):

javac -cp .;commons-io-2.4.jar AgeFileFilterTest.java 

với commons-io-2.4.jar trong thư mục tương tự như AgeFileFilterTest.java

tôi đã nhận được báo lỗi:

import org.apache.*; 
^ 
AgeFileFilterTest.java:24: error: cannot find symbol 
      displayFiles(directory, new AgeFileFilter(cutoffDate)); 
             ^

Nó được khó hiểu bởi vì nó dường như tất cả là tại chỗ; jar là trong thư mục, được định nghĩa trong classpath, và sau khi kiểm tra nội dung jar tôi có thể thấy những gì đã được referenced- sử dụng 7zip tôi mở file jar và có thể nhìn thấy:

commons-io-2.4.jar\org\apache\commons\io\filefilter\AbstractFileFilter.class 

sau đó tôi đọc trong một số bài "bạn không nhập khẩu các lớp" đó đã cho tôi suy nghĩ về cú pháp nhập khẩu ...

tôi đã thay đổi nó từ:

import org.apache.*; 

thay đổi nó để:

import org.apache.commons.io.filefilter.*; 

và wala biên dịch lỗi đi sử dụng:. javac -cp; commons-io-2.4.jar AgeFileFilterTest.java

và chương trình đã làm việc sử dụng

java -cp .;commons-io-2.4.jar AgeFileFilterTest 
Các vấn đề liên quan