2009-02-03 40 views
5

tôi sử dụng dòng lệnh trong cửa sổ để biên dịch và sau đó thực thi các chương trình java của tôi. Tôi đã đi đến http://java.sun.com/docs/books/tutorial/uiswing/start/compile.html và cố gắng biên dịch lớp HelloWorldSwing.java. nó làm việc, nhưng khi tôi thử "java HelloWorldSwing" nó mang lại cho tôi một loạt các erros và nói điều gì đó dọc theo dòng ngoại lệ trong chủ đề "chính" java.lang.NoClassDefFoundError: HelloWorldSwing (tên sai: start/HelloWorldSwing)không thể chạy đu từ dòng lệnh

tôi thử chạy với java start/HelloWorldSwing và nó nói noClassDefFoundError. tôi cũng không gặp lỗi với javac. đây là mã từ hướng dẫn:

import javax.swing.*;   

public class HelloWorldSwing { 
    /** 
    * Create the GUI and show it. For thread safety, 
    * this method should be invoked from the 
    * event-dispatching thread. 
    */ 
    private static void createAndShowGUI() { 
     //Create and set up the window. 
     JFrame frame = new JFrame("HelloWorldSwing"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     //Add the ubiquitous "Hello World" label. 
     JLabel label = new JLabel("Hello World"); 
     frame.getContentPane().add(label); 

     //Display the window. 
     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     //Schedule a job for the event-dispatching thread: 
     //creating and showing this application's GUI. 
     javax.swing.SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       createAndShowGUI(); 
      } 
     }); 
    } 
} 

EDIT: sử dụng javaw

cửa sổ bật lên

"một ngoại lệ java đã xảy ra"

cửa sổ khác

"lỗi: có thể không tìm thấy lớp học chính. lỗi: đã xảy ra lỗi jni, vui lòng kiểm tra cài đặt của bạn và thử lại. "

chưa bao giờ gặp bất kỳ sự cố nào khi chạy bất kỳ chương trình java nào, tôi có thiếu gì đó không? có cách nào để biết nó là gì không?

Tôi cũng đang chạy lệnh trong cùng một đường dẫn nơi .java và .class là.

không có thư mục nào bắt đầu trong đường dẫn nơi tôi đã biên dịch chương trình.

EDIT2 Tôi đã thử cả start/HelloWorldSwing và HelloWorldSwing với java.

Tôi cũng không gặp phải bất kỳ lỗi nào với javac. Tôi nhận được 2 cửa sổ bật lên với các tin nhắn tôi đã gõ trước đây khi tôi sử dụng javaw và java mang lại cho tôi NoClassDefFoundException, sau đó nói về ClassLoaders và whatnot.

EDIT3 Tôi đã làm việc này bằng cách xóa "bắt đầu gói"; hàng. tôi sẽ phải làm gì để làm việc đó?

javaw cũng hoạt động ngay bây giờ mà tôi đã xóa dòng gói.

+0

Bạn có thể dán đầu ra của bảng điều khiển của mình bắt đầu từ nơi bạn nhập "javac v.v ..." tiếp tục nơi bạn nhập javac etc.etc không? – OscarRyz

Trả lời

2

Đúng. trang đó có một lỗi nhỏ:

Lớp sử dụng một gói phần mềm, nhưng trong hướng dẫn chạy các gói không được sử dụng

Bạn có thể làm hai việc:

a) Thả tên gói (xóa dòng pacakge start;) và chạy như được chỉ ra

Hoặc

b) để lại dòng package start; trong mã và thêm tùy chọn -d-javac và sử dụng đầy đủ tên lớp.

Tôi hy vọng điều này sẽ hữu ích.

+1

Các hình ảnh đã biến mất ngay bây giờ, bạn có thể chỉnh sửa bài đăng không? – Mhmd

+0

Đó là lý do tại sao bạn phải tải lên hình ảnh để sử dụng các chức năng biên tập tích hợp sẵn hơn là tự quản lý chúng. Hoặc tốt hơn, không sử dụng hình ảnh ở tất cả và sử dụng các khối mã thay vào đó (như [bạn đã làm nửa giờ trước] (http://stackoverflow.com/a/509330/119540) đăng câu trả lời này). ': - /' – Synetech

+0

Trình chỉnh sửa tích hợp không tồn tại khi tôi tạo câu trả lời này gần 7 năm trước. – OscarRyz

2

Hãy thử điều này:

java HelloWorldSwing

Thay vì:

java start/HelloWorldSwing

Đối số cho trình biên dịch java (javac) là một tập tin (đó là lý do bắt đầu/HelloWorldSwing.java lẽ làm việc) nhưng lập luận với trình thông dịch Java (java) là tên lớp.

Đó là lý do tại sao bạn không nối thêm .class trong dòng lệnh và vì không có lớp nào có tên start/HelloWorldSwing Bạn nhận được thông báo lỗi đó (NoClassDefFoundError), có nghĩa là "Không có định nghĩa lớp nào được tìm thấy tên đó)

Để giữ cho mọi thứ trở nên dễ dàng hơn, hãy biên dịch và chạy các chương trình đầu tiên của bạn từ cùng thư mục chứa tệp .java của bạn.

+0

Ông đã làm; xem đoạn đầu tiên của câu hỏi. –

+0

@mmyers. Tôi không để ý. – OscarRyz

1

thử mã hoạt động tốt đảm bảo của bạn trong cùng thư mục với file Java và làm

javac HelloWorldSwing.java 
java HelloWorldSwing 
3

đâu bạn gọi lệnh java từ đâu? Từ mô tả của bạn, HelloWorldSwing.class nằm trong thư mục "bắt đầu", nhưng không nằm trong gói. Đây có thể là nguồn gốc của lỗi. Thử:

cd start 
java HelloWorldSwing 

EDIT: Mã từ hướng dẫn có tuyên bố "package start;" trong đó. Bạn đã xóa nó? Nếu không, hãy đặt HelloWorldSwing vào thư mục "bắt đầu" và chạy

java start.HelloWorldSwing 

từ thư mục hiện tại.

Xem thêm package tutorial.

+0

Không nếu lớp đó chứa chỉ thị gói. –

+0

@Pourquoi Litytestdata: Điều gì không xảy ra? –

+0

@mmyers: Yeap, có thể là lỗi ở đó, trong gói bắt đầu. :) – OscarRyz

1

Mã bạn đã liên kết không giống với mã bạn đưa vào câu hỏi của mình. Có dòng này ở trên cùng:

package start; 

Trong Java, cấu trúc gói phải được cấu trúc thư mục phản ánh. Vì vậy, nếu các lớp của bạn nằm trong một gói được gọi là 'bắt đầu', các tệp lớp được biên dịch phải nằm trong một thư mục có tên 'bắt đầu'. Vì vậy, hãy chắc chắn rằng HelloWorldSwing.class nằm trong thư mục 'start' và chạy biểu mẫu sau đây thư mục mẹ:

java start.HelloWorldSwing 
0

Chỉ cần thêm một dòng:

import java.awt.*;

0

bạn có thể biên dịch nó bằng cách:

javac HelloWorldSwing.java 

bạn có thể chạy nó bằng cách:

java -cp . HelloWorldSwing.java 

Cái này thực sự hoạt động.

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