30/09/2018, 21:17

Cách truyền đối số vào main(String [] args) trong Java

Câu hỏi giống như trên, mình có code theo như trong sách và tới đoạn này nó bắt truyền 2 tham số vào main() nhưng ở trong IDE netbean thì mình chỉ biết có Shift + f6 chạy luôn…
Mình đã thử qua Cmd: “java MiniMusicCmdLine 102 30” nhưng lại báo lỗi could not find or load main class.

MiniMusicCmd:

import javax.sound.midi.*;

/**
 *
 * @author tranl
 */
public class MiniMusicCmdLine {
    public static void main(String [] args){
        MiniMusicCmdLine mini = new MiniMusicCmdLine();
        if(args.length<2){
            System.out.println("Don't forget the istrument and note args");
        }else{
            int instrument = Integer.parseInt(args[0]);
            int note = Integer.parseInt(args[1]);
            mini.play(instrument,note);
        }
    }
    public void play(int instrument, int note){
        try{
            Sequencer sequencer = MidiSystem.getSequencer();
            sequencer.open();
            Sequence seq = new Sequence(Sequence.PPQ,4);
            Track track = seq.createTrack();
            
            MidiEvent event = null;
            
            ShortMessage first = new ShortMessage();
            first.setMessage(192,1,instrument,0);
            MidiEvent changeInstrument = new MidiEvent(first,1);
            track.add(changeInstrument);
            
            ShortMessage a = new ShortMessage();
            a.setMessage(144,1,note, 100);
            MidiEvent noteOn = new MidiEvent(a,1);
            track.add(noteOn);
            
            ShortMessage b = new ShortMessage();
            b.setMessage(128,1,note,100);
            MidiEvent noteOff = new MidiEvent(b,16);
            track.add(noteOff);
            
            sequencer.setSequence(seq);
            sequencer.start();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}
*grab popcorn* viết 23:27 ngày 30/09/2018

Chuột phải tên project -> Propertise
Chọn mục Run
Ở đó có 1 ô gọi là Arguments thì bạn ghi các đối số vào là đc

Người bị bơ viết 23:25 ngày 30/09/2018

Vậy hả bạn?


Sao nó nó củng không chạy vậy

Mình thử test nó củng không cho ra lỗi, đây là file Class mới có tên testArgumentMain. Dùng để test thôi không liên quan đến class ở phía trên

X viết 23:27 ngày 30/09/2018

File JavaTest.java trên ổ D:

public class JavaTest {
	public static void main(String[] args) {
		for (String i : args) {
		System.out.println(i);
		}
	}
}

Chạy lần lượt:
javac JavaTest.java
java JavaTest Huy Nguyen 9

Kết quả:
Huy
Nguyen
9

Người bị bơ viết 23:32 ngày 30/09/2018

Vậy còn cách truyền vào trong NetBean thì sao bạn?

Người bị bơ viết 23:19 ngày 30/09/2018

Mình thì chạy thử ví dụ của bạn với cmd được rồi đó , nhưng mình vẩn chưa hiểu tại sao file của mình nó lại là “could not find or load mian class”

X viết 23:18 ngày 30/09/2018

Xem lại project Properties ở trên hình của bạn thì có gì đó sai sai giữa tên class và mục “Main Class”.

headfirstjava là tên package chứa file HeadFirstJava (main class)
Nhưng ở dưới lại thấy MiniMusic… rồi lại testArgument…

P/s: args truyền vào bỏ dấu phẩy đi

Củ Chuối viết 23:17 ngày 30/09/2018

Integer.parseInt(args[0]);

bạn truyền có dấu “,” nên báo lỗi đó, dòng 13 kìa.

Người bị bơ viết 23:25 ngày 30/09/2018

Cái testArugment là cái class để test chạy thử nó có truyền được vào hay không ấy mà , còn cái vụ headfirstjava.HeadFirstJava thì mình không biết, nó mắc định là thế. Mình chỉ ới biết tạo project với tạo thêm folder trong project ấy thồi new thêm file .jva vào chạy thôi . Mới dùng nên nó thế.

*grab popcorn* viết 23:29 ngày 30/09/2018

Muốn thực thi bằng command line thì ra ngoài folder src rồi gõ (Tức là khi gõ dòng này bạn đang ở folder src)

java [package]/[class_name]

Muốn biên dịch thì thy java = javac

Còn muốn gọi nó ngay thư mục luôn thì bỏ cái dòng package trong code đi.

Và có vẻ như Java ko lấy cái tên file class = args[0]. Nên bạn phải truyền vào ít nhất 1 argument thì mới args[0] đc.

Người bị bơ viết 23:18 ngày 30/09/2018

Là như thế này?

Vấn đề của mình ở đây là: “Mình có file java khi chạy nó sẽ phát ra âm thanh!, nhưng chỉ chạy được trênh netbean còn chạy ở CMD thì lại could not find or load” version trước của nó khi không cần argument thì chỉ chạy được ở netbean và cho âm thanh!

import javax.sound.midi.*;
public class MiniMiniMusicApp {
    public static void main(String[] agrs){
        MiniMiniMusicApp mini = new MiniMiniMusicApp();
      
    }
    public void play(){
        try{
            Sequencer player = MidiSystem.getSequencer();
            player.open();
            Sequence seq = new Sequence(Sequence.PPQ, 4);
            Track track = seq.createTrack();
          
            ShortMessage a = new ShortMessage();
            a.setMessage(144,1,44,100);
            MidiEvent noteOn = new MidiEvent(a,1);
            track.add(noteOn);
          
            ShortMessage b = new ShortMessage();
            b.setMessage(128,1,44,100);
            MidiEvent noteOff = new MidiEvent(b, 16);
            track.add(noteOff);
          
            player.setSequence(seq);
          
            player.start();
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }
}

Nhưng khi qua version tiếp theo thì nói đòi hỏi argument, nhưng khổ nối netbean thì chả biết truyền kiêu gì, chạy trên cmd thì lại không ra.Tiến thoái lưởng nam, haha

*grab popcorn* viết 23:18 ngày 30/09/2018

Vô thêm 1 thư mục src nữa

Khi gõ là phải ở nè:
D:/NetBeanProjectFolder/src/

Thì giả dụ file chính của bạn ở trong folder playMusic, và nó có tên là playMe.java
Dòng lệnh như sau

D:/NetBeanProjectFolder/src> javac playMusic/playMe.java
D:/NetBeanProjectFolder/src> java playMusic/playMe

Còn nếu trong file playMe.java ko có cái dòng package playMusic;
thì vô thẳng thư mục playMusic luôn.
D:/NetBeanProjectFolder/src/playMusic>

Screenshot:

Lưu ý là tên package phải y chóc nhé.

Người bị bơ viết 23:30 ngày 30/09/2018

Ơ sao hay vậy :v, giờ được rồi tks bạn

Bài liên quan
0