会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132469个问题

老师好,请看一下:

问题:无法获取Goods类的brand属性

商品类:

package cn.sxt.thread;

public class Goods {
	private String name;
	private String brand;
	private boolean flag;//标志位,用来表示是否存在商品  flag = true表示有商品
	public Goods(String name, String brand) {
		super();
		this.name = name;
		this.brand = brand;
	}
	public Goods() {
		super();
		// TODO Auto-generated constructor stub
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getBrand() {
		return brand;
	}
	public void setBrand(String brand) {
		this.brand = brand;
	}
	public boolean isFlag() {
		return flag;
	}
	public void setFlag(boolean flag) {
		this.flag = flag;
	}
	//同步的用来获取商品的方法,用来避免数据错乱,线程通信notify和wait用来防止数据重复
	public synchronized void get() {
		if (!flag) {//相当于flag = false没有商品,消费者等待
			try {
				super.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		//消费者线程被唤醒,开始消费
		System.out.println("消费者消费:"+this.getBrand()+"\t"+this.getName());
		//通知生产者生产
		super.notify();
		flag = false;//表示没有商品了
	}
	//同步方法用来生产商品,同步用来避免数据错乱,线程通信notify/wait用来防止数据重复生产或者消费
	public synchronized void set(String Brand,String name) {
		if (flag) {//表示有商品,生产等待
			try {
				super.wait();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		//生产者线程被唤醒,开始生产
		this.name = name;
		this.brand = brand;
		System.out.println("生产者生产:"+this.getBrand()+"\t"+this.getName());
		//通知消费者消费
		super.notify();
		flag = true;//表示 有商品
		
	}
}

生产者:

package cn.sxt.thread;

public class Producer implements Runnable {
	private Goods g;
	
	public Producer(Goods g) {
		super();
		this.g = g;
	}

	public Producer() {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<10;i++) {
			try {
				Thread.sleep(300);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (i%2==0) {//偶数				
				g.set("旺仔", "小馒头");
			}else {
				g.set("哇哈哈", "矿泉水");
			}
			
		}
	}
	
}

消费者:

package cn.sxt.thread;

public class Consumer implements Runnable {
	private Goods g ;

	public Consumer(Goods g) {
		super();
		this.g = g;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int i=0;i<10;i++) {
			try {
				Thread.sleep(300);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			g.get();
		
		}
	}
	
}

测试类:

package cn.sxt.thread;

public class TestGoods {
	public static void main(String[] args) {
		//创建 商品类
		Goods g  =  new Goods();
		//创建生产者,消费者线程
		Producer p = new Producer(g);
		Consumer c = new Consumer(g);
		//启动线程
		new Thread(p).start();
		new Thread(c).start();
	}
}

运行效果截图:

image.png


JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程技术(旧) 20986楼
WEB前端全系列/第十九阶段:Vue2知识体系(旧)/Vue基础知识 20987楼
JAVA 全系列/第五阶段:JavaWeb开发/XML技术 20993楼

老师请问一下我的代码是跟着老师一步一步敲的为啥我登录结果是这样的,bjsxt当时换成xx登录成功了一次,在次登录的时候又不行了,请老师解答一下

package com.bjsxt.server;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import com.bjsxt.servlet.Servlet;
import com.bjsxt.util.IOCloseUtil;
/**
 * 服务器,用于启动和停止服务
 * @author Administrator
 *
 */
public class Server {
 private ServerSocket server;
 public static void main(String[] args) {
  Server server=new Server();//创建服务器对象
  server.start();
 }
 public void start(){
  this.start(8888);
 }
 public void start(int port){
  try {
   server=new ServerSocket(port);
   this.receive(); //调用接收请求信息的方法
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 private void receive() {
  try {
   //(1)监听
   Socket client=server.accept();
   
   //封装请求信息
   Request req=new Request(client.getInputStream());
   
   /**做出响应*/
   /*StringBuilder sb=new StringBuilder();
   sb.append("HTTP/1.1").append(" ").append(200).append(" ").append("OK").append("\r\n");
   sb.append("Content-Type:text/html;charset=utf-8").append("\r\n");
   //内容
   String str="<html><head><title>响应结果</title></head><body>成功</body></html>";
   sb.append("Content-Length:"+str.getBytes("utf-8").length).append("\r\n");
   sb.append("\r\n");
   sb.append(str);
   
   //通过输出流发送出去
   BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(client.getOutputStream(),"utf-8"));
   bw.write(sb.toString());
   bw.flush();
   bw.close();*/
   Response rep=new Response(client.getOutputStream());
   Servlet servlet=WebApp.getServlet(req.getUrl());
   int code=200;
   if (servlet==null) {
    code=404;
   }
   //调用Servlet中的服务的方法
   try {
    servlet.service(req, rep);
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   rep.pushToClient(code);
   IOCloseUtil.closeAll(client);
   
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  
 }
 public void stop(){
  
 }
package com.bjsxt.servlet;
import com.bjsxt.server.Request;
import com.bjsxt.server.Response;
/**
 * 是所有请求的Servlet的父类
 * 
 * @author Administrator
 *
 */
public abstract class Servlet {
 public void service(Request req,Response rep) throws Exception{
  this.doGet( req, rep);
  this.doPost( req, rep);
 }
 public abstract void doGet(Request req,Response rep) throws Exception;
 public abstract void doPost(Request req,Response rep) throws Exception;
}
package com.bjsxt.servlet;
import com.bjsxt.server.Request;
import com.bjsxt.server.Response;
public class LoginServlet extends Servlet{
 @Override
 public void doGet(Request req, Response rep) throws Exception {
   //获取请求参数
  String name=req.getParameter("username");
  String pwd=req.getParameter("pwd");
  
  if(this.login(name, pwd)){
   //调用响应中的构建内容的方
   rep.println(name+"登录成功");
  }else{
   rep.println(name+"登录失败,对不起,账号或密码不正确");
  }
  
 }
 private boolean login(String name,String pwd){
  if ("xx".equals(name)&&"123".equals(pwd)) {
   return true;
  }
  return false;
 }
 @Override
 public void doPost(Request req, Response rep) throws Exception {
  // TODO Auto-generated method stub
  
 }
 
}
package com.bjsxt.server;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import com.bjsxt.util.IOCloseUtil;
/**
 * 响应
 * @author Administrator
 *
 */
public class Response {
 private StringBuilder headInfo;//响应头
 private StringBuilder content;//响应内容
 private int length;//响应内容的长度
 //流
 private BufferedWriter bw;
 
 //两个常量,换行和空格
 private static final String CRLF="\r\n";//换行
 private static final String BLANK=" ";//空格
 
 //构造方法
 public Response() {
  headInfo=new StringBuilder();
  content=new StringBuilder();
  
 }
 //带参构造方法
 public Response(OutputStream os){
  this();//调用本类的无参构造方法
  try {
   bw=new BufferedWriter(new OutputStreamWriter(os, "utf-8"));
  } catch (UnsupportedEncodingException e) {
   headInfo=null;
  }
  
 }
 //构造正文部分
 public Response print(String info){
  content.append(info);
  try {
   length+=info.getBytes("utf-8").length;
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return this;
 }
 public Response println(String info){
  content.append(info).append(CRLF);
  try {
   length+=(info+CRLF).getBytes("utf-8").length;
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return this;
 }
 
 //构造响应头
 
 private void createHeadInfo(int code){
  headInfo.append("HTTP/1.1").append(BLANK).append(code).append(BLANK);
  switch (code) {
  case 200:
   headInfo.append("OK");
   break;
  case 500:
   headInfo.append("SERVER ERROR");
   break;
  default:
   headInfo.append("NOT FOUND");
   break;
  }
  headInfo.append(CRLF);
  headInfo.append("Content-Type:text/html;charset=utf-8").append(CRLF);
  headInfo.append("Content-Length:"+length).append(CRLF);
  headInfo.append(CRLF);
 }
 /**
  * 推送到客户机的浏览器
  * @param code
  */
 public void pushToClient(int code){
  if (headInfo==null) {
   code=500;
  }
  try {
   //调用本类中的构造响应头
   this.createHeadInfo(code);
   bw.write(headInfo.toString());
   bw.write(content.toString());
   bw.flush();
   this.close();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 public void close(){
  IOCloseUtil.closeAll(bw);
 }
}

1576990078(1).jpg

JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 20994楼
JAVA 全系列/第三阶段:数据库编程/Oracle 数据库的使用 20997楼
Python 全系列/第八阶段:轻量级Web开发利器-Flask框架/Flask视图基础和URL 20998楼
JAVA 全系列/(旧的隐藏)第七阶段:JAVA 高级技术/Dubbo 20999楼

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>

        *{
            margin: 0;
            padding: 0;
        }

        body{
            background-color: #f1f1f1;
        }

        .container{
            width: 1240px;
            margin: 0 auto;
        }

        .container ul{
            overflow: hidden;
            clear: both;
        }

        .container ul li{
            position: relative;
            float: left;
            list-style: none;
            background-color: #fff;
            margin-top: 10px;
            margin-right: 9px;
            width: 303px;
            height: 375px;
        }

        .container ul li a img{
            height: 230px;
            margin-top: 30px;
        }

        .container ul li:nth-child(4n){
            margin-right: 0;
        }

        .container ul li a{
            display: block;
            width: 100%;
            height: 100%;
            text-align: center;
            text-decoration: none;
        }

        .text .name{
            display: block;
            color: #333;
            font-size: 16px;
            margin-bottom: 2px;
        }

        .text .desc{
            display: block;
            color: #999;
            font-size: 14px;
        }
 
        .text .price i{
            font-style: normal;
            font-size: 14px;
            bottom: 3px;
        }
 
        .text .price{
            display: inline-block;
            color: #c00;
            font-size: 22px;
            padding-left: 14px;
        }
 
        .text .price em{
            font-size: 16px;
            font-style: normal;
        }
 
        .product-sign{
            position:absolute;
            top: 30px;
            left: 30px;
            display: block;
            width: 60px;
            height: 60px;
            background-color: #ff64a6;
            border-radius: 50%;
            line-height: 60px;
            color: #fff;
            font-size: 16px;
            text-align: center;
        }
 
 
    </style>
</head>
<body>
   
    <div class="container">
        <ul>
            <li>
                <a href="#">
                    <img src="./1.png" alt="">
                    <div class="text">
                        <span class="name">魅族 18</span>
                        <span class="desc">限时领券最高立省1000 | 12期免息</span>
                        <span class="price"><i>¥</i>3900<em>起</em></span>
                    </div>
                    <span class="product-sign">免息</span>
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="./1.png" alt="">
                    <div class="text">
                        <span class="name">魅族 18</span>
                        <span class="desc">限时领券最高立省1000 | 12期免息</span>
                        <span class="price"><i>¥</i>3900<em>起</em></span>
                    </div>
                    <span class="product-sign">免息</span>
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="./1.png" alt="">
                    <div class="text">
                        <span class="name">魅族 18</span>
                        <span class="desc">限时领券最高立省1000 | 12期免息</span>
                        <span class="price"><i>¥</i>3900<em>起</em></span>
                    </div>
                    <span class="product-sign">免息</span>
                </a>
            </li>
            <li>
                <a href="#">
                    <img src="./1.png" alt="">
                    <div class="text">
                        <span class="name">魅族 18</span>
                        <span class="desc">限时领券最高立省1000 | 12期免息</span>
                        <span class="price"><i>¥</i>3900<em>起</em></span>
                    </div>
                    <span class="product-sign">免息</span>
                </a>
            </li>
        </ul>
    </div>
</body>
</html>

.container ul li{

            position: relative;

}这里面的position一定要用relative相对定位吗?

WEB前端全系列/第一阶段:HTML5+CSS3模块/浮动与定位 21000楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637