我正在执行以下 ActiveMq 程序,将文件放入队列中。
public static void main(String[] args) throws JMSException, IOException {
FileInputStream in;
//Write the file from some location that is to be uploaded on ActiveMQ server
in = new FileInputStream("d:\\test-transfer-doc-1.docx");
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"tcp://localhost:61616?jms.blobTransferPolicy.defaultUploadUrl=http://admin:admin@localhost:8161/fileserver/");
ActiveMQConnection connection = (ActiveMQConnection) connectionFactory
.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue destination = session.createQueue("stream.file");
OutputStream out = connection.createOutputStream(destination);
// now write the file on to ActiveMQ
byte[] buffer = new byte[1024];
for (int bytesRead=0;bytesRead!=-1;) {
bytesRead = in.read(buffer);
System.out.println("bytes read="+bytesRead);
if (bytesRead == -1) {
out.close();
System.out.println("Now existiong from prog");
//System.exit(0);
break;
}
else{
System.out.println("sender\r\n");
out.write(buffer, 0, bytesRead);
}
}
System.out.println("After for loop");
}
当 bytesRead == -1 时,我想在其任务完成时从 JVM 卸载程序。为此,我最初使用break
关键字,并在 Eclipse 控制台上产生以下输出
使用它,程序不会从 JVM 中卸载,因为控制台 RED 按钮仍然处于活动状态。
现在我使用 System.exit(0) 来达到这个目的,并从 JVM 中退出程序。但我不想为此目的使用 System.exit(0) 。我也尝试使用简单的 voidreturn
来代替,break
但它也不起作用。
请说明为什么break
和return
在这种情况下无法结束程序以及为什么它仍在运行?
问候,
阿伦