我ServerSocket在我的应用程序中使用a时遇到问题.
我正在ServerSocket我的应用程序的构造函数中创建它.套接字的构造函数调用该accept()方法以等待客户端连接.
问题是该accept()方法冻结了我的整个应用程序,直到客户端连接.所以我想问一下是否有另一种方法可以ServerSocket在一个单独的线程中创建整体,在我的主应用程序旁边调用ServerSocket它的构造函数和它的accept()方法?
编辑:
感谢Olivier的建议,将.accept放入runnable并创建一个线程池来处理客户端连接.
那是我现在的代码:
public void start(){
final ExecutorService clientProcessingPool = Executors.newFixedThreadPool(10);
Runnable serverTask = new Runnable() {
@Override
public void run() {
try {
serverSocket = new ServerSocket(port);
while (true) {
Socket clientSocket = serverSocket.accept();
objectout = new ObjectOutputStream(clientSocket.getOutputStream());
clientProcessingPool.submit(new ClientTask(clientSocket,objectout));
}
} catch (IOException e) {
System.err.println("Accept failed.");
}
}
};
Run Code Online (Sandbox Code Playgroud)
万事都好!谢谢!
我将视频MP4放到了我的域名空间.我有它的公共URL,现在我想在我的Android应用程序中播放它; 但不知道我怎么能这样做.我使用了以下无效的代码.轨道控制器正在移动,但我在屏幕上看不到任何视频.
public class MPlayer extends Activity{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.playvideo);
VideoView videoView = new VideoView(MPlayer.this);
videoView.setMediaController(new MediaController(this));
videoView.setVideoURI(Uri.parse("http://www.semanticdevlab.com/abc.mp4"));
videoView.requestFocus();
videoView.start();
LinearLayout l = (LinearLayout)findViewById(R.id.mplayer);
l.addView(videoView);
}
}
Run Code Online (Sandbox Code Playgroud)