- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个单例对象负责启动和停止 http 服务器(使用 RESTlet 框架)。
当我创建对象时,boolean
var isStarted
设置为 false
。服务启动时,isStarted
设置为 true
。
这是我的单例代码:
private WebService() {
this(Protocol.HTTP, DEFAULT_PORT);
}
private WebService(final Protocol protocol, final int port)
{
this.protocol = protocol;
this.port = port;
this.isStarted = false;
// Creating a new Restlet component and
this.component = new Component();
}
public synchronized static WebService getInstance()
{
if(instance == null)
{
return new WebService();
}
return instance;
}
public synchronized static WebService getInstance(final Protocol protocol, final int port)
{
if(instance != null)
{
instance = null;
}
return new WebService(protocol, port);
}
现在我只使用 getInstance()
,不带任何参数。
以下是我启动和停止服务器的方法:
public synchronized boolean startServer(final Context context)
{
if ( isStarted ) {
Log.d(TAG, "Tried to start a running server");
throw new IllegalStateException("Tried to start a running server");
}
// Add a http connector to the component.
component.getServers().add(protocol, port);
component.getClients().add(Protocol.FILE);
// Static content
// Attach the component to the localhost
ipAuthenticator = new IPAuthenticator(org.restlet.Context.getCurrent());
ContactsRouter contactsRouter = new ContactsRouter(context, ipAuthenticator);
AuthenticationRouter authenticationRouter = new AuthenticationRouter(contactsRouter, ipAuthenticator);
component.getDefaultHost().attach(authenticationRouter);
// Start it! The HTTP server connector is also automatically started.
try {
component.start();
} catch (Exception e) {
Log.e(TAG, e.getMessage());
isStarted = false;
return false;
}
isStarted = true;
Log.d(TAG, "Server Started! and isStarted is: " + isStarted);
return true;
}
public Boolean stopServer()
{
Log.d(TAG, "WebService: isStarted: " + isStarted);
if(isStarted)
{
try {
component.stop();
Log.d(TAG, "Server stopped");
return true;
} catch (Exception e) {
Log.e(TAG, "Exception - Could not stop the server!");
e.printStackTrace();
}
}
return false;
}
我的问题是,当我使用应用程序用户界面启动和停止服务器时,我可以毫无问题地启动它,但是当我尝试停止服务器(启动后)时,我不能,因为 isStarted
应该是 true
时却是 false
,因为我之前刚刚启动了服务器。
这是当我尝试使用我的应用程序 Uuser 界面启动/停止服务器时:
public HttpServer(ProgressBar progressBar, Context context, boolean isChecked)
{
this.progressBar = progressBar;
progressBar.setEnabled(false);
this.context = context;
webService = WebService.getInstance();
this.isChecked = isChecked;
}
(...)
@Override
protected void onPostExecute(Void result) {
// Hide the progress bar
progressBar.setVisibility(View.GONE);
// Here in this logcat I receive-> is sever started?: **false** but it should be true
Log.d(TAG, "isChecked = " + isChecked + " || Is the server started?: " + webService.isStarted());
if(isChecked == true)
{
Log.d(TAG, "Going to start the server");
webService.startServer(context);
}
else
{
Log.d(TAG, "Going to stop the server");
webService.stopServer();
}
}
我的问题是,为什么在服务器启动后,isChecked
应该为 true 时却为 false?
谢谢!
最佳答案
您不会影响单例对象
public synchronized static WebService getInstance()
{
if(instance == null)
instance = new WebService();
return instance;
}
关于java - 变量改变我的单例对象内的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23513944/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!