2012-09-18 29 views
9

Tôi đã tải xuống hai lọ. Tôi muốn nhập một số lớp học có chứa của họ. Làm thế nào để tôi làm điều này?Làm cách nào để nhập các lọ vào chương trình java của tôi?

Dành cho lớp thuật toán của tôi. Tôi đã thử làm theo hướng dẫn trên trang web sau đây để không có kết quả.

http://algs4.cs.princeton.edu/code/

Có một trình cài đặt cho OSX (Tôi đang chạy Mountain Lion) mà bị cáo buộc thêm các lọ vào classpath của bạn. Thật không may, nó cũng cài đặt Dr. Java. Tôi chỉ muốn sử dụng Sublime và Terminal. Tôi cho rằng nó sẽ là đủ dễ dàng chỉ ...

import java.stdlib; 

trong tập tin Percolation.java của tôi, nhưng javac-ing chương trình mang lại một "gói stdlib không tồn tại", cũng như

import stdlib; 

tôi đã thêm vị trí của stdlib.jar và algs4.jar để CLASSPATH Terminal của tôi bằng tay thông qua:

export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/algs4.jar 
export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar/stdlib.jar:/Users/Michael/path/to/jar/stdlib.jar 

tôi cũng đã cố gắng

javac -cp $CLASSPATH:/Users/Michael/path/to/jar/algs4.jar:/Users/Michael/path/to/jar/stdlib.jar Percolation.java 

Nhưng tôi vẫn nhận được một

javac Percolation.java 
Percolation.java:1: cannot find symbol 
symbol : class stdlib 
location: package java 
import java.stdlib; 
    ^
Percolation.java:2: package java.algs4 does not exist 
import java.algs4.WeightedQuickUnionUF; 
      ^

gì đang xảy ra ở đây?

Cũng có cách để thêm vĩnh viễn các giá trị đó vào CLASSPATH của tôi trong sư tử núi OS X. Tôi phải thực hiện lệnh đó với mọi Thiết bị đầu cuối mới.

+0

'stdlib' là gì? 'Dr Java' là gì? Tôi sử dụng một maven để nhập/tải xuống các phụ thuộc mà tôi cần mà tôi chạy từ một IDE. Tôi không biết bất kỳ trình cài đặt nào sẽ thêm các lọ bạn có thể muốn vào đường dẫn lớp của bạn. –

+0

@Peter Lawrey Tiến sĩ Java là một IDE, stdlib là một trong những lọ tôi đã tải xuống và đang cố gắng nhập vào chương trình của tôi. Tôi đã cố gắng tự thêm các lọ này vào đường dẫn lớp của mình mà không thành công. –

+0

Tôi tin rằng bị cấm đặt tên gói là 'java.stdlib'. Khi chạy, một java.lang.SecurityException sẽ được ném ra.Vì vậy, việc nhập có thể sai. – RealHowTo

Trả lời

3

Nếu bạn đang sử dụng Terminal để biên dịch và chạy chương trình của bạn, sau đó trong cửa sổ Terminal, bắt đầu bằng cách thiết lập CLASSPATH:

$ export CLASSPATH=$CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar 

Sau đó, bạn có thể gõ echo $CLASSPATH và thấy rằng các lọ được tham chiếu.

Bây giờ, trong cùng một cửa sổ Thiết bị đầu cuối, hãy sử dụng javac để biên dịch lớp học của bạn. Việc đặt CLASSPATH như trên chỉ áp dụng cho cửa sổ Terminal hiện tại và bất kỳ quá trình nào được khởi chạy từ nó.

Hoặc bạn có thể vượt qua CLASSPATH để javac:

$ javac -cp $CLASSPATH:/Users/Michael/path/to/jar1.jar:/Users/Michael/path/to/jar2.jar MyClass.java 

Để tồn CLASSPATH này cho các phiên Terminal tương lai, hãy thêm dòng export trên vào file .profile trong thư mục chính của bạn.

+0

Cảm ơn sự giúp đỡ, nhưng những đề xuất này vẫn tạo ra lỗi. Tôi đã thêm vào câu hỏi của mình. –

+0

@MichaelGruber bạn cần thay đổi/path/thành phần để phản ánh vị trí của các lọ trên hệ thống tệp của bạn. Tôi đã sử dụng _path/to/_ như một trình giữ chỗ. Trong Terminal, đi đến nơi các lọ và gõ 'pwd'. điều này sẽ in những gì bạn cần phải đặt trong 'CLASSPATH' – pb2q

+1

Có, tôi biết. echo $ CLASSPATH output : /Users/Michael/Dropbox/Algorithms/includes/algs4.jar: /Users/Michael/Dropbox/Algorithms/includes/algs4.jar --- Tôi vẫn nhận được cùng một lỗi javac. –

0

Khởi chạy javac với tùy chọn -classpath <path_to_jar>. Hoặc chỉnh sửa biến môi trường CLASSPATH sao cho nó chứa JAR với các lớp bạn muốn sử dụng.

2

Bạn có thể có nội dung classpath đúng. Lớp bạn đang cố nhập có thể không được gọi là java.stdlib. Bạn cần phải nhập tên gói đủ điều kiện ... có thể là một cái gì đó như org.somecompany.ourlibrary.stdlib.Vì vậy, bạn sẽ cần

import org.somecompany.ourlibrary.stdlib 

ở đầu tệp Percolations.java của bạn với phần còn lại của báo cáo nhập.

+1

Nếu nó không chỉ stdlib, hoặc java.stdlib tôi không chắc chắn nó sẽ là gì ... Không nhiều trong cách gợi ý trên trang web tôi đã nhận nó từ. –

+0

Trong nhiều IDE, nếu bạn sử dụng một lớp từ thư viện nằm trong đường dẫn lớp của bạn, nó sẽ gợi ý và thêm nhập cho lớp đó cho bạn. Bạn không cần phải biết hầu hết các lớp học của bạn đang ở đâu trong các gói. –

1

Chương trình Percolation của bạn có chứa trong gói riêng của nó không? Nếu vậy hãy thử đặt nó vào gói mặc định bằng cách bình luận ra bất kỳ câu lệnh gói nào từ các tệp của bạn và biên dịch lại nó. Ngoài ra, không có gì trong số algs4 nằm trong gói java, đó là tất cả những điều riêng biệt của riêng nó.

3

Đã lỗi thời để trả lời câu hỏi này, nhưng có lẽ nó sẽ hữu ích cho những người tham gia tương lai của khóa học Thuật toán Princeton. Sau khi thêm CLASSPATH vào môi trường java lấy các lớp từ các gói nhưng vẫn sẽ tạo ra các lỗi trên lệnh nhập khẩu. Bạn cần phải xóa nhập khẩu algs4 và stdlib từ các tập tin nguồn và biên dịch sẽ chạy trơn tru.

Giải pháp này hoạt động trên Ubuntu 12.04 với zsh.

0

Tôi gặp phải sự cố tương tự trong quá trình làm việc trong khóa học này, nhưng đối với cửa sổ. Tôi sẽ để lại bình luận này ở đây trong trường hợp nó sẽ giúp ai đó.

Nếu bạn sử dụng DrJava bạn không cần bất kỳ câu lệnh import nào trong mã. Nếu bạn làm theo các bước cài đặt được mô tả trong khóa học, mọi thứ được cấu hình cho bạn.

Nhưng ở đây có thể là một vấn đề - nó đặt jar tệp trong thư mục người dùng hiện tại của bạn, đường dẫn có thể chứa các biểu tượng không phù hợp (chữ cái tiếng Nga trong trường hợp của tôi). Bạn cần phải kiểm tra nó trong Edit -> Preferences menu. Bạn có thể xem các đường dẫn algs4.jarstdlib.jar. Đảm bảo rằng đường dẫn này chính xác và trỏ đến các tệp hiện có thực.

Tôi vừa chuyển tất cả các tệp cần thiết sang một thư mục khác và thay đổi đường dẫn trong trình đơn này. Nó giải quyết vấn đề này cho tôi.

1

Nếu bạn đang sử dụng Eclipse (như tôi làm), hãy chọn dự án hiện tại, sau đó bạn mở thuộc tính dự án từ các trình đơn. Ở bên trái, bạn chọn "Đường dẫn xây dựng Java", sau đó bạn chọn các thư viện tab. Bây giờ bạn nhấp vào nút "Thêm Chum bên ngoài" và bạn trỏ đến các tệp jar của mình và bạn đã hoàn tất.

Chúc may mắn.

0

Tôi lãng phí rất nhiều thời gian khi nhập lớp, thử tùy chọn CL là "javac -cp.; Stdlib.jar mad.java" v.v. nhưng được sử dụng để nhận được cùng lỗi mà bạn đã đề cập.
Sau đó tôi đã nhận xét việc nhập hoàn toàn và đảm bảo tùy chọn của DrJava có 2 classpath được thêm + biến% CLASSPATH% để có giá trị phù hợp. Chỉ đơn giản là làm việc ngay bây giờ. Chúc may mắn!

0

chỉ cần đặt tên gói là mặc định thì nó sẽ hoạt động tốt. cũng sau đó bạn không cần phải nhập khẩu anyting chỉ cần chạy một số mã được cung cấp trong

Fundamentsls

chương như

trung bình

.

0

Giải pháp của tôi là thêm 2 hệ thống xây dựng mới vào trình soạn thảo văn bản Sublime của tôi: một để biên dịch và một để thực hiện. Sử dụng Tools-> Build_system-> New_build_system ... từ menu chính với những đoạn hai mã:

cho biên soạn (tôi đã đặt tên cho tập tin "algs-compile.sublime_build"):

{ 
    "cmd": ["javac", "-cp", "/Users/admin/algs4/stdlib.jar:/Users/admin/algs4/algs4.jar:.", "$file"], 
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)", 
    "selector": "source.java" 
} 

cho chạy ("algs-run.sublime_build")

{ 
    "cmd": ["java", "-cp", "/Users/admin/algs4/stdlib.jar:/Users/admin/algs4/algs4.jar:.", "$file_base_name"] 
} 

Đừng quên thay đường dẫn đến tệp jar ở đây bằng các đường dẫn chính xác từ hệ thống của bạn. Tôi hiểu rằng câu hỏi này khá cũ nhưng tôi hy vọng điều này sẽ giúp ai đó.

0

Nếu bạn đang nhận được "không thể được giải quyết với một loại" lỗi, và đã cố gắng thêm stdlib.jar hoặc các tập tin algs4.jar, đây là giải pháp:

Các thư viện trong stdlib.jar và algs4 .jar nằm trong gói "mặc định". Trong Java, bạn không thể truy cập các lớp trong gói mặc định từ một gói có tên. Nếu bạn cần sử dụng các thư viện có gói được đặt tên, bạn có thể sử dụng các phiên bản gói này:

stdlib-package.jar và algs4-package.jar.

Bạn có thể tải về những tập tin này ở đây: http://algs4.cs.princeton.edu/code/

Sau đó, bạn có thể tự động thêm việc nhập khẩu: nhập khẩu edu.princeton.cs.algs4.ClassName

0

Mở Sublime bạn

Chọn Tools -> Xây dựng Hệ thống-> Hệ thống Xây dựng Mới

Thêm mã bên dưới vào tệp mới

này có thể cho biết siêu việt để chạy các lệnh

{ 
    "cmd": ["javac -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file\" && java -cp java -cp /Users/yourusername/algs4/stdlib.jar:/Users/yourusername/algs4/algs4.jar:. \"$file_base_name\""], 
    "shell":true, 
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)", 
    "selector": "source.java" 
} 

Hy vọng điều này có thể giúp những người đang theo dõi các khóa học Thuật toán từ Đại học Princeton

0

Tôi có vấn đề này như vậy. Giải pháp của Renfei Wang làm việc cho tôi (tôi không có đủ điểm để bình luận trực tiếp về phản ứng của anh ấy).

Trong tuyệt vời, điều hướng đến Preferences: Browse Packages>JavaC.sublime_build.

Đây là những gì tôi trông giống như:

{ 
    "cmd": ["javac", "-cp", "/Users/jason/Documents/lib/*:./","$file"], 
    "file_regex": "^(...*?):([0-9]*):?([0-9]*)", 
    "selector": "source.java" 
} 

/Users/jason/Documents/lib/*:/ phép Sublime biết vị trí của thư mục chứa gói của tôi, vì vậy mà bây giờ khi tôi xây dựng, nó tải các gói đầu tiên.

Các vấn đề liên quan